diff --git a/.dockerignore b/.dockerignore index f8d01a3f..c2764f51 100644 --- a/.dockerignore +++ b/.dockerignore @@ -26,6 +26,7 @@ cython_debug/ # Python environments .Python +.python-version env/ env.bak/ venv/ @@ -38,7 +39,6 @@ __pypackages__/ # Packaging and distribution # ────────────────────────────────────────────────────────────────────────── build/ -dist/ dist-ssr/ *.egg *.egg-info/ @@ -69,14 +69,13 @@ pip-delete-this-directory.txt # ────────────────────────────────────────────────────────────────────────── storefront/Dockerfile docker-compose.yml -db_backups/ -services_data/ +backups/ static/ media/ -!core/static -!blog/static -!vibes_auth/static -!payments/static +!engine/core/static +!engine/blog/static +!engine/vibes_auth/static +!engine/payments/static # Environment file .env diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..526c8a38 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.sh text eol=lf \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9ca0fda8..44102a49 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ venv.bak/ ENV/ .venv/ __pypackages__/ +.python-version # Local Django settings and database local_settings.py @@ -35,7 +36,7 @@ db.sqlite3-journal # Django backups and metadata instance/ -db_backups/ +backups/ # ────────────────────────────────────────────────────────────────────────── # Logs and reports @@ -50,6 +51,7 @@ coverage.* *.cover *.py,cover nosetests.xml +tmp # Coverage / test reports htmlcov/ @@ -90,6 +92,7 @@ share/python-wheels/ pip-log.txt pip-delete-this-directory.txt desktop.ini +*.iml # Node build artifacts npm-debug.log* @@ -106,22 +109,14 @@ static/ media/ # Allow checked-in static from apps -!core/static/ -!payments/static/ -!vibes_auth/static/ -!blog/static/ +!engine/core/static/ +!engine/payments/static/ +!engine/vibes_auth/static/ +!engine/blog/static/ # Webassets .webassets-cache/ -# ────────────────────────────────────────────────────────────────────────── -# Docker & service data -# ────────────────────────────────────────────────────────────────────────── -# Local volume mounts -services_data/ -services_data/postgres/ -services_data/redis/ - # ────────────────────────────────────────────────────────────────────────── # Node dependencies # ────────────────────────────────────────────────────────────────────────── @@ -145,6 +140,7 @@ cypress/screenshots/ !.idea/icon.svg !.idea/externalDependencies.xml !.idea/evibes.iml +!.idea/evibes.ico # Microsoft *.suo @@ -168,4 +164,8 @@ cypress/screenshots/ .env # Development stuff -test.ipynb \ No newline at end of file +test.ipynb + +# Production stuff +.initialized +queries \ No newline at end of file diff --git a/core/docs/images/evibes.ico b/.idea/evibes.ico similarity index 100% rename from core/docs/images/evibes.ico rename to .idea/evibes.ico diff --git a/.idea/evibes.iml b/.idea/evibes.iml deleted file mode 100644 index a54ba5f9..00000000 --- a/.idea/evibes.iml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/externalDependencies.xml b/.idea/externalDependencies.xml deleted file mode 100644 index 66339880..00000000 --- a/.idea/externalDependencies.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CODEOWNERS b/CODEOWNERS index 047718e6..bc569427 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -10,7 +10,7 @@ docker-compose.yml @@maintainer .dockerignore @@maintainer nginx @@maintainer pyproject.toml @fureunoir contact@fureunoir.com -poetry.lock @fureunoir contact@fureunoir.com +uv.lock @fureunoir contact@fureunoir.com *.py @fureunoir contact@fureunoir.com *.bat @fureunoir contact@fureunoir.com diff --git a/Dockerfiles/Dockerfile.app b/Dockerfiles/app.Dockerfile similarity index 66% rename from Dockerfiles/Dockerfile.app rename to Dockerfiles/app.Dockerfile index 52042174..622f4b25 100644 --- a/Dockerfiles/Dockerfile.app +++ b/Dockerfiles/app.Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -FROM python:3.12-bookworm +FROM python:3.12-slim-bookworm LABEL authors="fureunoir" ENV PYTHONDONTWRITEBYTECODE=1 \ @@ -13,7 +13,7 @@ WORKDIR /app RUN set -eux; \ sed -i 's|https://deb.debian.org/debian|https://ftp.uk.debian.org/debian|g' /etc/apt/sources.list.d/debian.sources; \ apt-get update; \ - apt-get install -y --no-install-recommends wget gnupg; \ + apt-get install -y --no-install-recommends wget gnupg curl; \ wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -; \ echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" \ > /etc/apt/sources.list.d/pgdg.list; \ @@ -26,24 +26,32 @@ RUN set -eux; \ graphviz-dev \ libgts-dev \ libpq5 \ + chrony \ graphviz \ binutils \ libproj-dev \ postgresql-client-17 \ gdal-bin; \ rm -rf /var/lib/apt/lists/*; \ - pip install --upgrade pip; \ - curl -sSL https://install.python-poetry.org | python3 + pip install --upgrade pip + +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:/root/.cargo/bin:$PATH" + +RUN uv venv /opt/evibes-python +ENV VIRTUAL_ENV=/opt/evibes-python +ENV UV_PROJECT_ENVIRONMENT=/opt/evibes-python +ENV PATH="/opt/evibes-python/bin:/root/.local/bin:/root/.cargo/bin:$PATH" COPY pyproject.toml pyproject.toml -COPY poetry.lock poetry.lock +COPY uv.lock uv.lock -RUN poetry config virtualenvs.create false -RUN poetry install --extras="graph worker openai testing" --no-interaction --no-ansi +RUN set -eux; \ + uv sync --extra graph --extra worker --extra openai --locked COPY ./scripts/Docker/app-entrypoint.sh /usr/local/bin/app-entrypoint.sh RUN chmod +x /usr/local/bin/app-entrypoint.sh COPY . . -ENTRYPOINT ["app-entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["/usr/bin/bash", "app-entrypoint.sh"] \ No newline at end of file diff --git a/Dockerfiles/Dockerfile.beat b/Dockerfiles/beat.Dockerfile similarity index 66% rename from Dockerfiles/Dockerfile.beat rename to Dockerfiles/beat.Dockerfile index 84410630..97cdd9ee 100644 --- a/Dockerfiles/Dockerfile.beat +++ b/Dockerfiles/beat.Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -FROM python:3.12-bookworm +FROM python:3.12-slim-bookworm LABEL authors="fureunoir" ENV PYTHONDONTWRITEBYTECODE=1 \ @@ -13,7 +13,7 @@ WORKDIR /app RUN set -eux; \ sed -i 's|https://deb.debian.org/debian|https://ftp.uk.debian.org/debian|g' /etc/apt/sources.list.d/debian.sources; \ apt-get update; \ - apt-get install -y --no-install-recommends wget gnupg; \ + apt-get install -y --no-install-recommends wget gnupg curl; \ wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -; \ echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" \ > /etc/apt/sources.list.d/pgdg.list; \ @@ -26,24 +26,32 @@ RUN set -eux; \ graphviz-dev \ libgts-dev \ libpq5 \ + chrony \ graphviz \ binutils \ libproj-dev \ postgresql-client-17 \ gdal-bin; \ rm -rf /var/lib/apt/lists/*; \ - pip install --upgrade pip; \ - curl -sSL https://install.python-poetry.org | python3 + pip install --upgrade pip + +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:/root/.cargo/bin:$PATH" +ENV UV_PROJECT_ENVIRONMENT=/opt/evibes-python +ENV PATH="/opt/evibes-python/bin:/root/.local/bin:/root/.cargo/bin:$PATH" + +RUN uv venv /opt/evibes-python +ENV VIRTUAL_ENV=/opt/evibes-python COPY pyproject.toml pyproject.toml -COPY poetry.lock poetry.lock +COPY uv.lock uv.lock -RUN poetry config virtualenvs.create false -RUN poetry install --extras="worker openai" --no-interaction --no-ansi +RUN set -eux; \ + uv sync --extra worker --extra openai --locked COPY ./scripts/Docker/beat-entrypoint.sh /usr/local/bin/beat-entrypoint.sh RUN chmod +x /usr/local/bin/beat-entrypoint.sh COPY . . -ENTRYPOINT ["beat-entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["/usr/bin/bash", "beat-entrypoint.sh"] \ No newline at end of file diff --git a/Dockerfiles/stock_updater.Dockerfile b/Dockerfiles/stock_updater.Dockerfile new file mode 100644 index 00000000..f725d9b8 --- /dev/null +++ b/Dockerfiles/stock_updater.Dockerfile @@ -0,0 +1,57 @@ +# syntax=docker/dockerfile:1 +FROM python:3.12-slim-bookworm +LABEL authors="fureunoir" + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + LANG=C.UTF-8 \ + DEBIAN_FRONTEND=noninteractive \ + PATH="/root/.local/bin:$PATH" + +WORKDIR /app + +RUN set -eux; \ + sed -i 's|https://deb.debian.org/debian|https://ftp.uk.debian.org/debian|g' /etc/apt/sources.list.d/debian.sources; \ + apt-get update; \ + apt-get install -y --no-install-recommends wget gnupg curl; \ + wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -; \ + echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" \ + > /etc/apt/sources.list.d/pgdg.list; \ + apt-get update; \ + apt-get install -y --no-install-recommends --fix-missing \ + build-essential \ + libpq-dev \ + gettext \ + libgettextpo-dev \ + graphviz-dev \ + libgts-dev \ + libpq5 \ + chrony \ + graphviz \ + binutils \ + libproj-dev \ + postgresql-client-17 \ + gdal-bin; \ + rm -rf /var/lib/apt/lists/*; \ + pip install --upgrade pip + +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:/root/.cargo/bin:$PATH" +ENV UV_PROJECT_ENVIRONMENT=/opt/evibes-python +ENV PATH="/opt/evibes-python/bin:/root/.local/bin:/root/.cargo/bin:$PATH" + +RUN uv venv /opt/evibes-python +ENV VIRTUAL_ENV=/opt/evibes-python + +COPY pyproject.toml pyproject.toml +COPY uv.lock uv.lock + +RUN set -eux; \ + uv sync --extra worker --extra openai --locked + +COPY ./scripts/Docker/stock-updater-entrypoint.sh /usr/local/bin/stock-updater-entrypoint.sh +RUN chmod +x /usr/local/bin/stock-updater-entrypoint.sh + +COPY . . + +ENTRYPOINT ["/usr/bin/bash", "stock-updater-entrypoint.sh"] \ No newline at end of file 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/Dockerfiles/Dockerfile.worker b/Dockerfiles/worker.Dockerfile similarity index 66% rename from Dockerfiles/Dockerfile.worker rename to Dockerfiles/worker.Dockerfile index b34fcaf3..62bd35ce 100644 --- a/Dockerfiles/Dockerfile.worker +++ b/Dockerfiles/worker.Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -FROM python:3.12-bookworm +FROM python:3.12-slim-bookworm LABEL authors="fureunoir" ENV PYTHONDONTWRITEBYTECODE=1 \ @@ -13,7 +13,7 @@ WORKDIR /app RUN set -eux; \ sed -i 's|https://deb.debian.org/debian|https://ftp.uk.debian.org/debian|g' /etc/apt/sources.list.d/debian.sources; \ apt-get update; \ - apt-get install -y --no-install-recommends wget gnupg; \ + apt-get install -y --no-install-recommends wget gnupg curl; \ wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -; \ echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" \ > /etc/apt/sources.list.d/pgdg.list; \ @@ -26,24 +26,32 @@ RUN set -eux; \ graphviz-dev \ libgts-dev \ libpq5 \ + chrony \ graphviz \ binutils \ libproj-dev \ postgresql-client-17 \ gdal-bin; \ rm -rf /var/lib/apt/lists/*; \ - pip install --upgrade pip; \ - curl -sSL https://install.python-poetry.org | python3 + pip install --upgrade pip + +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:/root/.cargo/bin:$PATH" + +RUN uv venv /opt/evibes-python +ENV VIRTUAL_ENV=/opt/evibes-python +ENV UV_PROJECT_ENVIRONMENT=/opt/evibes-python +ENV PATH="/opt/evibes-python/bin:/root/.local/bin:/root/.cargo/bin:$PATH" COPY pyproject.toml pyproject.toml -COPY poetry.lock poetry.lock +COPY uv.lock uv.lock -RUN poetry config virtualenvs.create false -RUN poetry install --extras="worker openai" --no-interaction --no-ansi +RUN set -eux; \ + uv sync --extra worker --extra openai --locked COPY ./scripts/Docker/worker-entrypoint.sh /usr/local/bin/worker-entrypoint.sh RUN chmod +x /usr/local/bin/worker-entrypoint.sh COPY . . -ENTRYPOINT ["worker-entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["/usr/bin/bash", "worker-entrypoint.sh"] \ No newline at end of file diff --git a/README.md b/README.md index 5eacae06..aca50b61 100644 --- a/README.md +++ b/README.md @@ -1,154 +1,132 @@ # eVibes -![LOGO](core/docs/images/evibes-big.png) +![LOGO](engine/core/docs/images/evibes-big.png) -eVibes is an eCommerce backend service built with Django. It’s designed for flexibility, making it ideal for various use -cases and learning Django skills. The project is straightforward to customize, allowing for straightforward editing and -extension. +eVibes — a lightweight, production-ready e‑commerce backend. Storefront, product catalog, cart, and orders work out of the box. Minimal complexity, maximum flexibility — install, adjust to your needs, and start selling. + +- Public issues: https://plane.wiseless.xyz/spaces/issues/dd33cb0ab9b04ef08a10f7eefae6d90c/?board=kanban ## Table of Contents -- [Features](#features) -- [Getting Started](#getting-started) - - [Prerequisites](#prerequisites) - - [Installation](#installation) -- [Configuration](#configuration) - - [Dockerfile](#Dockerfile) - - [nginx](#nginx) - - [.env](#env) -- [Usage](#usage) -- [Contact](#contact) +- Features +- Quick Start + - Prerequisites + - Installation +- Configuration + - Dockerfile + - nginx + - .env +- Usage +- Contributing +- Contact +- License ## Features -- **Modular Architecture**: Extend and customize the backend to fit your needs. -- **Dockerized Deployment**: Quick setup and deployment using Docker and Docker Compose. -- **Asynchronous Task Processing**: Integrated Celery workers and beat scheduler for background tasks. -- **GraphQL and REST APIs**: Supports both GraphQL and RESTful API endpoints. -- **Internationalization**: Multilingual support using modeltranslate. -- **Advanced Caching**: Utilizes Redis for caching and task queuing. -- **Security**: Implements JWT authentication and rate limiting. +- Modular backend, easy to extend and customize +- Dockerized deployment with Docker Compose +- Celery workers and beat for background tasks +- REST and GraphQL APIs +- Internationalization with modeltranslation +- Redis-based caching and queues +- JWT auth and rate limiting -## Getting Started +## Quick Start ### Prerequisites -- Docker and Docker Compose are installed on your machine. +- Docker and Docker Compose ### Installation -1. Clone the repository: - +1. Clone the repository ```bash git clone https://gitlab.com/wiseless.xyz/eVibes.git cd eVibes ``` -2. Choose the storefront. By default, `main` branch has no storefront included. -Skip this step if you're OK with that and plan to only use API or develop your own storefront. - +2. Choose a storefront (optional). The `main` branch ships without a storefront. If you want one, pick a branch: ```bash - git checkout storefront- + git checkout storefront- ``` -3. Generate your .env file. Check and confirm the contents afterward. +3. Generate your .env file and review its values + - Windows + ```powershell + scripts\Windows\generate-environment-file.ps1 + ``` + - Unix + ```bash + scripts/Unix/generate-environment-file.sh + ``` - - Windows - ```powershell - scripts\Windows\generate-environment-file.ps1 - ``` - - Unix - ```bash - scripts/Unix/generate-environment-file.sh - ``` +4. Install dependencies + - Windows + ```powershell + scripts\Windows\install.ps1 + ``` + - Unix + ```bash + scripts/Unix/install.sh + ``` -4. Install all the dependencies. +5. Run the stack + - Windows + ```powershell + scripts\Windows\run.ps1 + ``` + - Unix + ```bash + scripts/Unix/run.sh + ``` - - Windows - ```powershell - scripts\Windows\install.ps1 - ``` - - Unix - ```bash - scripts/Unix/install.sh - ``` - -5. Spin it up. - - - Windows - ```powershell - scripts\Windows\run.ps1 - ``` - - Unix - ```bash - scripts/Unix/run.sh - ``` - -6. Bring to production. - - Include `nginx` file to your nginx configuration, you really want to install and - run [Certbot](https://certbot.eff.org/) afterward! +6. Production checklist + - Include `nginx.conf` into your Nginx setup + - Issue TLS certs with Certbot (https://certbot.eff.org/) ## Configuration ### Dockerfile - -Remember to change the -`RUN sed -i 's|https://deb.debian.org/debian|https://ftp..debian.org/debian|g' /etc/apt/sources.list.d/debian.sources` -before running installment scripts +If you rely on locale mirrors, adjust Debian sources before running installation scripts: +``` +RUN sed -i 's|https://deb.debian.org/debian|https://ftp..debian.org/debian|g' /etc/apt/sources.list.d/debian.sources +``` ### nginx - -Please comment-out SSL-related lines, then apply necessary configurations, run `certbot --cert-only --nginx`, -decomment previously commented lines and enjoy eVibes over HTTPS! +- Comment out SSL-related lines +- Apply your domain-specific settings +- Run `certbot --cert-only --nginx` +- Uncomment SSL lines and reload Nginx ### .env - -After .env file generation, you may want to edit some of its values, such as macroservices` API keys, database password, -redis password, etc. +After generation, review and update secrets and credentials (API keys, DB password, Redis password, etc.). ## Usage -- Add the necessary subdomains to DNS-settings of your domain, those are: +- DNS records you’ll typically want: + 1. @.your-domain.com + 2. www.your-domain.com + 3. api.your-domain.com + 4. prometheus.your-domain.com -1. @.your-domain.com -2. www.your-domain.com -3. api.your-domain.com -4. b2b.your-domain.com -5. prometheus.your-domain.com +- Once running, access: + - API root / Admin redirect: http://api.localhost:8000/ + - REST docs: http://api.localhost:8000/docs/swagger or http://api.localhost:8000/docs/redoc + - GraphQL: http://api.localhost:8000/graphql/ -- Add these lines to your hosts-file to use django-hosts functionality on localhost(*DEVELOPMENT ONLY*): +## Contributing -```hosts -127.0.0.1 api.localhost -127.0.0.1 b2b.localhost -``` - -Once the services are up and running, you can access the application at -`http://api.your-domain.com`(http://api.localhost:8000). - -- **Django Admin**: `http://api.your-domain.com/` (will redirect to admin) -- **API Docs**: - - REST API: `http://api.localhost:8000/docs/swagger` or `http://api.localhost:8000/docs/redoc` - - GraphQL API: `http://api.localhost:8000/graphql/` - -## Uninstall eVibes - -You are not planning to do that, aren't you? - -- Windows - ```powershell - scripts\Windows\uninstall.ps1 - ``` -- Unix - ```bash - scripts/Unix/uninstall.sh - ``` +- Track and report issues here: https://plane.wiseless.xyz/spaces/issues/dd33cb0ab9b04ef08a10f7eefae6d90c/?board=list +- Pull requests are welcome. Please keep changes minimal and focused. ## Contact -- **Author**: Egor "fureunoir" Gorbunov - - Email: contact@fureunoir.com - - Telegram: [@fureunoir](https://t.me/fureunoir) +- Author: Egor "fureunoir" Gorbunov + - Email: contact@fureunoir.com + - Telegram: https://t.me/fureunoir -![FAVICON](core/docs/images/evibes.png) \ No newline at end of file +## License + +This project is licensed under the terms of the LICENSE file included in this repository. + +![FAVICON](engine/core/docs/images/evibes.png) \ No newline at end of file diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.mo b/blog/locale/ar_AR/LC_MESSAGES/django.mo deleted file mode 100644 index 5300dfa5..00000000 Binary files a/blog/locale/ar_AR/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.po b/blog/locale/ar_AR/LC_MESSAGES/django.po deleted file mode 100644 index d6829c39..00000000 --- a/blog/locale/ar_AR/LC_MESSAGES/django.po +++ /dev/null @@ -1,71 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: ar-ar\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "المدونة" - -#: blog/models.py:17 -msgid "post title" -msgstr "عنوان المنشور" - -#: blog/models.py:17 -msgid "title" -msgstr "العنوان" - -#: blog/models.py:64 -msgid "post" -msgstr "المنشور" - -#: blog/models.py:65 -msgid "posts" -msgstr "المنشورات" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "معرّف العلامة الداخلي لعلامة المنشور" - -#: blog/models.py:83 -msgid "tag name" -msgstr "اسم العلامة" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "اسم سهل الاستخدام لعلامة المنشور" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "اسم عرض العلامة" - -#: blog/models.py:96 -msgid "post tag" -msgstr "علامة المشاركة" - -#: blog/models.py:97 -msgid "post tags" -msgstr "علامات المشاركة" - -#~ msgid "eVibes Engine" -#~ msgstr "محرك eVibes" diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.mo b/blog/locale/cs_CZ/LC_MESSAGES/django.mo deleted file mode 100644 index e10d7a66..00000000 Binary files a/blog/locale/cs_CZ/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.po b/blog/locale/cs_CZ/LC_MESSAGES/django.po deleted file mode 100644 index 132ad618..00000000 --- a/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ /dev/null @@ -1,73 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: cs-cz\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Název příspěvku" - -#: blog/models.py:17 -msgid "title" -msgstr "Název" - -#: blog/models.py:64 -msgid "post" -msgstr "Příspěvek" - -#: blog/models.py:65 -msgid "posts" -msgstr "Příspěvky" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se " -"vylučují." - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "interní identifikátor tagu pro tag příspěvku" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Název štítku" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Uživatelsky přívětivý název pro značku příspěvku" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Zobrazení názvu štítku" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Označení příspěvku" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Štítky příspěvků" - -#~ msgid "eVibes Engine" -#~ msgstr "Motor eVibes" diff --git a/blog/locale/da_DK/LC_MESSAGES/django.mo b/blog/locale/da_DK/LC_MESSAGES/django.mo deleted file mode 100644 index e5c1f73b..00000000 Binary files a/blog/locale/da_DK/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/da_DK/LC_MESSAGES/django.po b/blog/locale/da_DK/LC_MESSAGES/django.po deleted file mode 100644 index 125b261e..00000000 --- a/blog/locale/da_DK/LC_MESSAGES/django.po +++ /dev/null @@ -1,71 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: da-dk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Indlæggets titel" - -#: blog/models.py:17 -msgid "title" -msgstr "Titel" - -#: blog/models.py:64 -msgid "post" -msgstr "Indlæg" - -#: blog/models.py:65 -msgid "posts" -msgstr "Indlæg" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "Markdown-filer understøttes ikke - brug markdown-indhold i stedet!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "intern tag-identifikator for indlægs-tagget" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Tag-navn" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Brugervenligt navn til posttagget" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Navn på tag-visning" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Tag til indlæg" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Tags til indlæg" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibes-motor" diff --git a/blog/locale/de_DE/LC_MESSAGES/django.mo b/blog/locale/de_DE/LC_MESSAGES/django.mo deleted file mode 100644 index ca95544b..00000000 Binary files a/blog/locale/de_DE/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/de_DE/LC_MESSAGES/django.po b/blog/locale/de_DE/LC_MESSAGES/django.po deleted file mode 100644 index 770c510b..00000000 --- a/blog/locale/de_DE/LC_MESSAGES/django.po +++ /dev/null @@ -1,74 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: de-de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Titel des Beitrags" - -#: blog/models.py:17 -msgid "title" -msgstr "Titel" - -#: blog/models.py:64 -msgid "post" -msgstr "Beitrag" - -#: blog/models.py:65 -msgid "posts" -msgstr "Beiträge" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen " -"Markdown-Inhalte!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - " -"beide schließen sich gegenseitig aus" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "interner Tag-Bezeichner für den Post-Tag" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Tag name" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Benutzerfreundlicher Name für das Post-Tag" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Tag-Anzeigename" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Tag eintragen" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Tags eintragen" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibes Motor" diff --git a/blog/locale/en_GB/LC_MESSAGES/django.mo b/blog/locale/en_GB/LC_MESSAGES/django.mo deleted file mode 100644 index 4a846ade..00000000 Binary files a/blog/locale/en_GB/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/en_GB/LC_MESSAGES/django.po b/blog/locale/en_GB/LC_MESSAGES/django.po deleted file mode 100644 index 0007ac7a..00000000 --- a/blog/locale/en_GB/LC_MESSAGES/django.po +++ /dev/null @@ -1,81 +0,0 @@ -# EVIBES GETTEXT TRANSLATIONS -# 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 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Post's title" - -#: blog/models.py:17 -msgid "title" -msgstr "Title" - -#: blog/models.py:64 -msgid "post" -msgstr "Post" - -#: blog/models.py:65 -msgid "posts" -msgstr "Posts" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "Markdown files are not supported yer - use markdown content instead!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"a markdown file or markdown content must be provided - mutually exclusive" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "internal tag identifier for the post tag" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Tag name" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "User-friendly name for the post tag" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Tag display name" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Post tag" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Post tags" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibes Engine" - -#~ msgid "(no content yet)" -#~ msgstr "(no content yet)" - -#~ msgid "rendered HTML" -#~ msgstr "Rendered HTML" diff --git a/blog/locale/en_US/LC_MESSAGES/django.mo b/blog/locale/en_US/LC_MESSAGES/django.mo deleted file mode 100644 index bf1dee8a..00000000 Binary files a/blog/locale/en_US/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/en_US/LC_MESSAGES/django.po b/blog/locale/en_US/LC_MESSAGES/django.po deleted file mode 100644 index 4c5b42f4..00000000 --- a/blog/locale/en_US/LC_MESSAGES/django.po +++ /dev/null @@ -1,71 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: en-us\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Post's title" - -#: blog/models.py:17 -msgid "title" -msgstr "Title" - -#: blog/models.py:64 -msgid "post" -msgstr "Post" - -#: blog/models.py:65 -msgid "posts" -msgstr "Posts" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "Markdown files are not supported yer - use markdown content instead!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"a markdown file or markdown content must be provided - mutually exclusive" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "internal tag identifier for the post tag" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Tag name" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "User-friendly name for the post tag" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Tag display name" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Post tag" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Post tags" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibes Engine" diff --git a/blog/locale/es_ES/LC_MESSAGES/django.mo b/blog/locale/es_ES/LC_MESSAGES/django.mo deleted file mode 100644 index 6f9496da..00000000 Binary files a/blog/locale/es_ES/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/es_ES/LC_MESSAGES/django.po b/blog/locale/es_ES/LC_MESSAGES/django.po deleted file mode 100644 index 0cbd963b..00000000 --- a/blog/locale/es_ES/LC_MESSAGES/django.po +++ /dev/null @@ -1,73 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: es-es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Título del mensaje" - -#: blog/models.py:17 -msgid "title" -msgstr "Título" - -#: blog/models.py:64 -msgid "post" -msgstr "Publicar en" - -#: blog/models.py:65 -msgid "posts" -msgstr "Puestos" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"se debe proporcionar un archivo markdown o contenido markdown - mutuamente " -"excluyentes" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "identificador interno de la etiqueta post" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Nombre de la etiqueta" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Nombre fácil de usar para la etiqueta de la entrada" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Nombre de la etiqueta" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Etiqueta postal" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Etiquetas" - -#~ msgid "eVibes Engine" -#~ msgstr "Motor eVibes" diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.mo b/blog/locale/fr_FR/LC_MESSAGES/django.mo deleted file mode 100644 index 64081a77..00000000 Binary files a/blog/locale/fr_FR/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.po b/blog/locale/fr_FR/LC_MESSAGES/django.po deleted file mode 100644 index 81d9be0b..00000000 --- a/blog/locale/fr_FR/LC_MESSAGES/django.po +++ /dev/null @@ -1,74 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: fr-fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Titre du message" - -#: blog/models.py:17 -msgid "title" -msgstr "Titre" - -#: blog/models.py:64 -msgid "post" -msgstr "Poste" - -#: blog/models.py:65 -msgid "posts" -msgstr "Postes" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du " -"contenu Markdown !" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent " -"mutuellement" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "identifiant interne de la balise post" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Nom du jour" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Nom convivial pour la balise post" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Nom d'affichage de l'étiquette" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Tag de poste" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Tags de la poste" - -#~ msgid "eVibes Engine" -#~ msgstr "Moteur eVibes" diff --git a/blog/locale/hi_IN/LC_MESSAGES/django.po b/blog/locale/hi_IN/LC_MESSAGES/django.po deleted file mode 100644 index 2aafbe02..00000000 --- a/blog/locale/hi_IN/LC_MESSAGES/django.po +++ /dev/null @@ -1,70 +0,0 @@ -# EVIBES GETTEXT TRANSLATIONS -# 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 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "" - -#: blog/models.py:17 -msgid "post title" -msgstr "" - -#: blog/models.py:17 -msgid "title" -msgstr "" - -#: blog/models.py:64 -msgid "post" -msgstr "" - -#: blog/models.py:65 -msgid "posts" -msgstr "" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "" - -#: blog/models.py:83 -msgid "tag name" -msgstr "" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "" - -#: blog/models.py:96 -msgid "post tag" -msgstr "" - -#: blog/models.py:97 -msgid "post tags" -msgstr "" diff --git a/blog/locale/it_IT/LC_MESSAGES/django.mo b/blog/locale/it_IT/LC_MESSAGES/django.mo deleted file mode 100644 index 4fe49af5..00000000 Binary files a/blog/locale/it_IT/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/it_IT/LC_MESSAGES/django.po b/blog/locale/it_IT/LC_MESSAGES/django.po deleted file mode 100644 index 66658f56..00000000 --- a/blog/locale/it_IT/LC_MESSAGES/django.po +++ /dev/null @@ -1,72 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: it-it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Titolo del post" - -#: blog/models.py:17 -msgid "title" -msgstr "Titolo" - -#: blog/models.py:64 -msgid "post" -msgstr "Posta" - -#: blog/models.py:65 -msgid "posts" -msgstr "Messaggi" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "I file Markdown non sono supportati: usa invece i contenuti Markdown!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"deve essere fornito un file markdown o un contenuto markdown - si escludono " -"a vicenda" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "identificatore interno del tag post" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Nome del tag" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Nome intuitivo per il tag del post" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Nome del tag" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Post tag" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Tag dei post" - -#~ msgid "eVibes Engine" -#~ msgstr "Motore eVibes" diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.mo b/blog/locale/ja_JP/LC_MESSAGES/django.mo deleted file mode 100644 index b4077744..00000000 Binary files a/blog/locale/ja_JP/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.po b/blog/locale/ja_JP/LC_MESSAGES/django.po deleted file mode 100644 index ff9c3d99..00000000 --- a/blog/locale/ja_JP/LC_MESSAGES/django.po +++ /dev/null @@ -1,74 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: ja-jp\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "ブログ" - -#: blog/models.py:17 -msgid "post title" -msgstr "投稿タイトル" - -#: blog/models.py:17 -msgid "title" -msgstr "タイトル" - -#: blog/models.py:64 -msgid "post" -msgstr "ポスト" - -#: blog/models.py:65 -msgid "posts" -msgstr "投稿" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ" -"ンツを使用してください!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな" -"い。" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "投稿タグの内部タグ識別子" - -#: blog/models.py:83 -msgid "tag name" -msgstr "タグ名" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "投稿タグのユーザーフレンドリーな名前" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "タグ表示名" - -#: blog/models.py:96 -msgid "post tag" -msgstr "投稿タグ" - -#: blog/models.py:97 -msgid "post tags" -msgstr "投稿タグ" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibesエンジン" diff --git a/blog/locale/kk_KZ/LC_MESSAGES/django.po b/blog/locale/kk_KZ/LC_MESSAGES/django.po deleted file mode 100644 index 2aafbe02..00000000 --- a/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ /dev/null @@ -1,70 +0,0 @@ -# EVIBES GETTEXT TRANSLATIONS -# 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 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "" - -#: blog/models.py:17 -msgid "post title" -msgstr "" - -#: blog/models.py:17 -msgid "title" -msgstr "" - -#: blog/models.py:64 -msgid "post" -msgstr "" - -#: blog/models.py:65 -msgid "posts" -msgstr "" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "" - -#: blog/models.py:83 -msgid "tag name" -msgstr "" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "" - -#: blog/models.py:96 -msgid "post tag" -msgstr "" - -#: blog/models.py:97 -msgid "post tags" -msgstr "" diff --git a/blog/locale/nl_NL/LC_MESSAGES/django.mo b/blog/locale/nl_NL/LC_MESSAGES/django.mo deleted file mode 100644 index 479f9000..00000000 Binary files a/blog/locale/nl_NL/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/nl_NL/LC_MESSAGES/django.po b/blog/locale/nl_NL/LC_MESSAGES/django.po deleted file mode 100644 index eadaa76a..00000000 --- a/blog/locale/nl_NL/LC_MESSAGES/django.po +++ /dev/null @@ -1,74 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: nl-nl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Titel van de post" - -#: blog/models.py:17 -msgid "title" -msgstr "Titel" - -#: blog/models.py:64 -msgid "post" -msgstr "Plaats" - -#: blog/models.py:65 -msgid "posts" -msgstr "Berichten" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan " -"markdown-inhoud!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds " -"exclusief" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "interne tagidentifier voor de posttag" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Tag naam" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Gebruiksvriendelijke naam voor de posttag" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Tag weergavenaam" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Post tag" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Post tags" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibes motor" diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.mo b/blog/locale/pl_PL/LC_MESSAGES/django.mo deleted file mode 100644 index 726aa952..00000000 Binary files a/blog/locale/pl_PL/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.po b/blog/locale/pl_PL/LC_MESSAGES/django.po deleted file mode 100644 index 5c9342e6..00000000 --- a/blog/locale/pl_PL/LC_MESSAGES/django.po +++ /dev/null @@ -1,73 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: pl-pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Tytuł postu" - -#: blog/models.py:17 -msgid "title" -msgstr "Tytuł" - -#: blog/models.py:64 -msgid "post" -msgstr "Post" - -#: blog/models.py:65 -msgid "posts" -msgstr "Posty" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się " -"wykluczające" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "wewnętrzny identyfikator tagu posta" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Nazwa tagu" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Przyjazna dla użytkownika nazwa tagu posta" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Wyświetlana nazwa znacznika" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Tag posta" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Tagi postów" - -#~ msgid "eVibes Engine" -#~ msgstr "Silnik eVibes" diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.mo b/blog/locale/pt_BR/LC_MESSAGES/django.mo deleted file mode 100644 index 52b3f93d..00000000 Binary files a/blog/locale/pt_BR/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.po b/blog/locale/pt_BR/LC_MESSAGES/django.po deleted file mode 100644 index 841e0faa..00000000 --- a/blog/locale/pt_BR/LC_MESSAGES/django.po +++ /dev/null @@ -1,72 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: pt-br\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Título da postagem" - -#: blog/models.py:17 -msgid "title" -msgstr "Título" - -#: blog/models.py:64 -msgid "post" -msgstr "Postar" - -#: blog/models.py:65 -msgid "posts" -msgstr "Publicações" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Os arquivos markdown não são suportados - use conteúdo markdown em vez disso!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "identificador de tag interno para a tag de postagem" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Nome da etiqueta" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Nome de fácil utilização para a tag de postagem" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Nome de exibição da tag" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Etiqueta de postagem" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Tags de postagem" - -#~ msgid "eVibes Engine" -#~ msgstr "Motor eVibes" diff --git a/blog/locale/ro_RO/LC_MESSAGES/django.mo b/blog/locale/ro_RO/LC_MESSAGES/django.mo deleted file mode 100644 index 9df78c8a..00000000 Binary files a/blog/locale/ro_RO/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/ro_RO/LC_MESSAGES/django.po b/blog/locale/ro_RO/LC_MESSAGES/django.po deleted file mode 100644 index e4842420..00000000 --- a/blog/locale/ro_RO/LC_MESSAGES/django.po +++ /dev/null @@ -1,73 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: ro-ro\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Blog" - -#: blog/models.py:17 -msgid "post title" -msgstr "Titlul postului" - -#: blog/models.py:17 -msgid "title" -msgstr "Titlul" - -#: blog/models.py:64 -msgid "post" -msgstr "Post" - -#: blog/models.py:65 -msgid "posts" -msgstr "Mesaje" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut Markdown!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"trebuie furnizat un fișier markdown sau conținut markdown - se exclud " -"reciproc" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "identificator intern de etichetă pentru eticheta postului" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Nume etichetă" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Nume ușor de utilizat pentru eticheta postului" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Nume afișare etichetă" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Etichetă post" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Etichete poștale" - -#~ msgid "eVibes Engine" -#~ msgstr "Motorul eVibes" diff --git a/blog/locale/ru_RU/LC_MESSAGES/django.mo b/blog/locale/ru_RU/LC_MESSAGES/django.mo deleted file mode 100644 index 8220775b..00000000 Binary files a/blog/locale/ru_RU/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/ru_RU/LC_MESSAGES/django.po b/blog/locale/ru_RU/LC_MESSAGES/django.po deleted file mode 100644 index 05e6f69a..00000000 --- a/blog/locale/ru_RU/LC_MESSAGES/django.po +++ /dev/null @@ -1,74 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: ru-ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "Блог" - -#: blog/models.py:17 -msgid "post title" -msgstr "Заголовок сообщения" - -#: blog/models.py:17 -msgid "title" -msgstr "Название" - -#: blog/models.py:64 -msgid "post" -msgstr "Пост" - -#: blog/models.py:65 -msgid "posts" -msgstr "Посты" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"Файлы в формате Markdown не поддерживаются - используйте вместо них " -"содержимое в формате Markdown!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"необходимо предоставить файл разметки или содержимое разметки - " -"взаимоисключающие варианты" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "внутренний идентификатор тега для тега post" - -#: blog/models.py:83 -msgid "tag name" -msgstr "Название тега" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "Удобное для пользователя название тега поста" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "Отображаемое имя тега" - -#: blog/models.py:96 -msgid "post tag" -msgstr "Тэг поста" - -#: blog/models.py:97 -msgid "post tags" -msgstr "Тэги постов" - -#~ msgid "eVibes Engine" -#~ msgstr "Движок eVibes" diff --git a/blog/locale/zh_Hans/LC_MESSAGES/django.mo b/blog/locale/zh_Hans/LC_MESSAGES/django.mo deleted file mode 100644 index 7824700f..00000000 Binary files a/blog/locale/zh_Hans/LC_MESSAGES/django.mo and /dev/null differ diff --git a/blog/locale/zh_Hans/LC_MESSAGES/django.po b/blog/locale/zh_Hans/LC_MESSAGES/django.po deleted file mode 100644 index 18ddad0c..00000000 --- a/blog/locale/zh_Hans/LC_MESSAGES/django.po +++ /dev/null @@ -1,70 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: EVIBES 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: zh-hans\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blog/apps.py:8 -msgid "blog" -msgstr "博客" - -#: blog/models.py:17 -msgid "post title" -msgstr "帖子标题" - -#: blog/models.py:17 -msgid "title" -msgstr "标题" - -#: blog/models.py:64 -msgid "post" -msgstr "职位" - -#: blog/models.py:65 -msgid "posts" -msgstr "职位" - -#: blog/models.py:69 -msgid "markdown files are not supported yet - use markdown content instead" -msgstr "不支持 Markdown 文件,请使用 Markdown 内容!" - -#: blog/models.py:71 -msgid "" -"a markdown file or markdown content must be provided - mutually exclusive" -msgstr "必须提供标记符文件或标记符内容 - 相互排斥" - -#: blog/models.py:82 -msgid "internal tag identifier for the post tag" -msgstr "职位标签的内部标签标识符" - -#: blog/models.py:83 -msgid "tag name" -msgstr "标签名称" - -#: blog/models.py:87 -msgid "user-friendly name for the post tag" -msgstr "方便用户使用的帖子标签名称" - -#: blog/models.py:88 -msgid "tag display name" -msgstr "标签显示名称" - -#: blog/models.py:96 -msgid "post tag" -msgstr "职位标签" - -#: blog/models.py:97 -msgid "post tags" -msgstr "帖子标签" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibes 引擎" diff --git a/blog/migrations/0001_initial.py b/blog/migrations/0001_initial.py deleted file mode 100644 index d9f6c5ed..00000000 --- a/blog/migrations/0001_initial.py +++ /dev/null @@ -1,73 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-28 11:56 - -import uuid - -import django.db.models.deletion -import django_extensions.db.fields -import markdown_field.fields -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='PostTag', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('tag_name', models.CharField(help_text='internal tag identifier for the post tag', max_length=255, - verbose_name='tag name')), - ('name', models.CharField(help_text='user-friendly name for the post tag', max_length=255, unique=True, - verbose_name='tag display name')), - ], - options={ - 'verbose_name': 'post tag', - 'verbose_name_plural': 'post tags', - }, - ), - migrations.CreateModel( - name='Post', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('title', models.CharField()), - ('content', markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name='content')), - ('file', models.FileField(blank=True, null=True, upload_to='posts/')), - ('slug', models.SlugField(allow_unicode=True)), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='posts', - to=settings.AUTH_USER_MODEL)), - ('tags', models.ManyToManyField(to='blog.posttag')), - ], - options={ - 'verbose_name': 'post', - 'verbose_name_plural': 'posts', - }, - ), - ] diff --git a/blog/migrations/0002_alter_post_slug_alter_post_title.py b/blog/migrations/0002_alter_post_slug_alter_post_title.py deleted file mode 100644 index fbaf535f..00000000 --- a/blog/migrations/0002_alter_post_slug_alter_post_title.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-28 12:07 - -import django_extensions.db.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='post', - name='slug', - field=django_extensions.db.fields.AutoSlugField(allow_unicode=True, blank=True, editable=False, populate_from='title', unique=True), - ), - migrations.AlterField( - model_name='post', - name='title', - field=models.CharField(help_text='post title', max_length=128, unique=True, verbose_name='title'), - ), - ] diff --git a/blog/urls.py b/blog/urls.py deleted file mode 100644 index ac04560f..00000000 --- a/blog/urls.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.urls import include, path -from rest_framework.routers import DefaultRouter - -from blog.viewsets import PostViewSet - -app_name = "blog" - -payment_router = DefaultRouter() -payment_router.register(prefix=r"posts", viewset=PostViewSet, basename="posts") - -urlpatterns = [ - path(r"", include(payment_router.urls)), -] diff --git a/blog/views.py b/blog/views.py deleted file mode 100644 index 13a93de5..00000000 --- a/blog/views.py +++ /dev/null @@ -1,3 +0,0 @@ -import logging - -logger = logging.getLogger("evibes") diff --git a/blog/viewsets.py b/blog/viewsets.py deleted file mode 100644 index deb26f23..00000000 --- a/blog/viewsets.py +++ /dev/null @@ -1,32 +0,0 @@ -from django_filters.rest_framework import DjangoFilterBackend -from rest_framework.viewsets import ReadOnlyModelViewSet - -from blog.filters import PostFilter -from blog.models import Post -from blog.serializers import PostSerializer -from core.permissions import EvibesPermission - - -class PostViewSet(ReadOnlyModelViewSet): - """ - Encapsulates operations for managing and retrieving Post entities in a read-only model view set. - - This class is tailored to handle Post objects that are active and allows filtration based on defined - filters. It integrates with Django's backend filtering system and ensures operations align with the - defined permissions. The view set also includes an additional "retrieve" permission configuration. - - Attributes: - serializer_class: Specifies the serializer to be used for Post objects. - permission_classes: Defines the permissions required to interact with this view set. - queryset: Determines the initial queryset, filtered to include only active Post objects. - filter_backends: Lists the backends to be used for filtering querysets. - filterset_class: Defines the set of filters used for filtering Post objects. - additional: Contains additional configuration, such as specific action permissions. - """ - - serializer_class = PostSerializer - permission_classes = (EvibesPermission,) - queryset = Post.objects.filter(is_active=True) - filter_backends = [DjangoFilterBackend] - filterset_class = PostFilter - additional = {"retrieve": "ALLOW"} diff --git a/core/abstract.py b/core/abstract.py deleted file mode 100644 index 4a742d35..00000000 --- a/core/abstract.py +++ /dev/null @@ -1,36 +0,0 @@ -import uuid -from datetime import datetime - -from django.db.models import BooleanField, Model, UUIDField -from django.utils.translation import gettext_lazy as _ -from django_extensions.db.fields import CreationDateTimeField, ModificationDateTimeField - - -class NiceModel(Model): - id = None - uuid: uuid = UUIDField( # type: ignore - verbose_name=_("unique id"), - help_text=_("unique id is used to surely identify any database object"), - primary_key=True, - default=uuid.uuid4, - editable=False, - ) - is_active: bool = BooleanField( # type: ignore - default=True, - verbose_name=_("is active"), - help_text=_("if set to false, this object can't be seen by users without needed permission"), - ) - created: datetime = CreationDateTimeField( # type: ignore - _("created"), help_text=_("when the object first appeared on the database") - ) - modified: datetime = ModificationDateTimeField( # type: ignore - _("modified"), help_text=_("when the object was last modified") - ) - - def save(self, **kwargs): - self.update_modified = kwargs.pop("update_modified", getattr(self, "update_modified", True)) - super().save(**kwargs) - - class Meta: - abstract = True - get_latest_by = "modified" diff --git a/core/admin.py b/core/admin.py deleted file mode 100644 index 46a6ee3c..00000000 --- a/core/admin.py +++ /dev/null @@ -1,527 +0,0 @@ -from contextlib import suppress - -from constance.admin import Config -from constance.admin import ConstanceAdmin as BaseConstanceAdmin -from dalf.admin import DALFRelatedFieldAjax, DALFRelatedOnlyField -from django import forms -from django.apps import apps -from django.contrib import admin -from django.contrib.admin import ModelAdmin, TabularInline -from django.contrib.admin.widgets import get_select2_language -from django.contrib.gis.admin import GISModelAdmin -from django.db.models import Model -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 evibes.settings import CONSTANCE_CONFIG - -from .forms import OrderForm, OrderProductForm, VendorForm -from .models import ( - Address, - Attribute, - AttributeGroup, - AttributeValue, - Brand, - Category, - CategoryTag, - Feedback, - Order, - OrderProduct, - Product, - ProductImage, - ProductTag, - PromoCode, - Promotion, - Stock, - Vendor, - Wishlist, -) - - -class FieldsetsMixin: - general_fields: list = [] - relation_fields: list = [] - model: Model - - def get_fieldsets(self, request, obj=None): - fieldsets = [] - - def add_translations_fieldset(fss): - with suppress(NotRegistered): - transoptions = translator.get_options_for_model(self.model) - translation_fields = [] - for orig in transoptions.local_fields: - translation_fields += get_translation_fields(orig) - if translation_fields: - fss = list(fss) + [(_("translations"), {"fields": translation_fields})] - return fss - - if self.general_fields: - fieldsets.append((_("general"), {"fields": self.general_fields})) - if self.relation_fields: - fieldsets.append((_("relations"), {"fields": self.relation_fields})) - opts = self.model._meta - - if any(f.name == "uuid" for f in opts.fields): - if any(f.name == "slug" for f in opts.fields): - fieldsets.append((_("metadata"), {"fields": ["uuid", "slug"]})) - else: - fieldsets.append((_("metadata"), {"fields": ["uuid"]})) - - 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 = add_translations_fieldset(fieldsets) - return fieldsets - - -class BasicModelAdmin(ModelAdmin): - @admin.action(description=str(_("activate selected %(verbose_name_plural)s"))) - def activate_selected(self, request, queryset) -> str: - if request: - pass - queryset.update(is_active=True) - return str(_("%(verbose_name_plural)s activated successfully!")) - - @admin.action(description=str(_("deactivate selected %(verbose_name_plural)s"))) - def deactivate_selected(self, request, queryset) -> str: - if request: - pass - queryset.update(is_active=False) - return str(_("%(verbose_name_plural)s deactivated successfully.")) - - def get_actions(self, request): - actions = super().get_actions(request) - actions["activate_selected"] = ( - self.activate_selected, - "activate_selected", - str(_("activate selected %(verbose_name_plural)s")), - ) - actions["deactivate_selected"] = ( - self.deactivate_selected, - "deactivate_selected", - str(_("deactivate selected %(verbose_name_plural)s")), - ) - return actions - - -class AttributeValueInline(TabularInline): - 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" - - -class ProductImageInline(TabularInline): - model = ProductImage - extra = 0 - is_navtab = True - verbose_name = _("image") - verbose_name_plural = _("images") - icon = "fa-regular fa-images" - - -class StockInline(TabularInline): - model = Stock - extra = 0 - is_navtab = True - verbose_name = _("stock") - verbose_name_plural = _("stocks") - icon = "fa-solid fa-boxes-stacked" - - -class OrderProductInline(TabularInline): - model = OrderProduct - 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" - - def get_queryset(self, request): - return super().get_queryset(request).select_related("product").only("product__name") - - -class CategoryChildrenInline(TabularInline): - model = Category - fk_name = "parent" - extra = 0 - fields = ("name", "description", "is_active", "image", "markup_percent") - is_navtab = True - verbose_name = _("children") - verbose_name_plural = _("children") - icon = "fa-solid fa-leaf" - - -@admin.register(AttributeGroup) -class AttributeGroupAdmin(FieldsetsMixin, BasicModelAdmin): - model = AttributeGroup # type: ignore - list_display = ("name", "modified") - search_fields = ("uuid", "name") - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "name", "parent"] - relation_fields = [] - - -@admin.register(Attribute) -class AttributeAdmin(FieldsetsMixin, BasicModelAdmin): - model = Attribute # type: ignore - list_display = ("name", "group", "value_type", "modified") - list_filter = ("value_type", "group", "is_active") - search_fields = ("uuid", "name", "group__name") - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ["categories", "group"] - - general_fields = ["is_active", "name", "value_type"] - relation_fields = ["group", "categories"] - - -@admin.register(AttributeValue) -class AttributeValueAdmin(FieldsetsMixin, BasicModelAdmin): - model = AttributeValue # type: ignore - list_display = ("attribute", "value", "modified") - list_filter = ("attribute__group", "is_active") - search_fields = ("uuid", "value", "attribute__name") - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ["attribute"] - - general_fields = ["is_active", "value"] - relation_fields = ["attribute", "product"] - - -@admin.register(Category) -class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, BasicModelAdmin): - model = Category # type: ignore - list_display = ("indented_title", "parent", "is_active", "modified") - list_filter = ("is_active", "level", "created", "modified") - search_fields = ("uuid", "name") - inlines = [CategoryChildrenInline] - autocomplete_fields = ["parent", "tags"] - readonly_fields = ("slug", "uuid", "modified", "created") - - general_fields = ["is_active", "name", "description", "image", "markup_percent", "priority"] - relation_fields = ["parent", "tags"] - - -@admin.register(Brand) -class BrandAdmin(FieldsetsMixin, BasicModelAdmin): - model = Brand # type: ignore - list_display = ("name",) - list_filter = ("categories", "is_active") - search_fields = ("uuid", "name", "categories__name") - readonly_fields = ("uuid", "slug", "modified", "created") - - general_fields = ["is_active", "name", "description", "priority"] - relation_fields = ["small_logo", "big_logo", "categories"] - - -@admin.register(Product) -class ProductAdmin(FieldsetsMixin, BasicModelAdmin): - model = Product # type: ignore - list_display = ( - "name", - "partnumber", - "is_active", - "category", - "brand", - "price", - "rating", - "modified", - ) - list_filter = ( - "is_active", - "is_digital", - ("brand", DALFRelatedFieldAjax), - ("category", DALFRelatedFieldAjax), - ("tags", DALFRelatedFieldAjax), - ("stocks__vendor", DALFRelatedOnlyField), - "created", - "modified", - ) - search_fields = ( - "name", - "partnumber", - "brand__name", - "category__name", - "uuid", - "slug", - ) - readonly_fields = ("slug", "uuid", "modified", "created") - autocomplete_fields = ("category", "brand", "tags") - inlines = [AttributeValueInline, ProductImageInline, StockInline] - - general_fields = ["is_active", "name", "partnumber", "is_digital"] - relation_fields = ["category", "brand", "tags"] - - @property - def media(self): - i18n_name = get_select2_language() - i18n_file = (f"admin/js/vendor/select2/i18n/{i18n_name}.js",) if i18n_name else () - return super().media + forms.Media( - js=( - "admin/js/vendor/jquery/jquery.min.js", - "admin/js/vendor/select2/select2.full.min.js", - *i18n_file, - "admin/js/jquery.init.js", - "admin/js/django_admin_list_filter.js", - ), - css={ - "screen": ( - "admin/css/vendor/select2/select2.min.css", - "admin/css/autocomplete.css", - "admin/css/django_admin_list_filter.css", - ), - }, - ) - - -@admin.register(ProductTag) -class ProductTagAdmin(FieldsetsMixin, BasicModelAdmin): - model = ProductTag # type: ignore - list_display = ("tag_name",) - search_fields = ("tag_name",) - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "tag_name", "name"] - relation_fields = [] - - -@admin.register(CategoryTag) -class CategoryTagAdmin(FieldsetsMixin, BasicModelAdmin): - model = CategoryTag # type: ignore - list_display = ("tag_name",) - search_fields = ("tag_name",) - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "tag_name", "name"] - relation_fields = [] - - -@admin.register(Vendor) -class VendorAdmin(FieldsetsMixin, BasicModelAdmin): - model = Vendor # type: ignore - list_display = ("name", "markup_percent", "modified") - list_filter = ("markup_percent", "is_active") - search_fields = ("name",) - readonly_fields = ("uuid", "modified", "created") - form = VendorForm - - general_fields = ["is_active", "name", "markup_percent", "authentication"] - relation_fields = [] - - -@admin.register(Feedback) -class FeedbackAdmin(FieldsetsMixin, BasicModelAdmin): - model = Feedback # type: ignore - list_display = ("order_product", "rating", "comment", "modified") - list_filter = ("rating", "is_active") - search_fields = ("order_product__product__name", "comment") - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "rating", "comment"] - relation_fields = ["order_product"] - - -@admin.register(Order) -class OrderAdmin(FieldsetsMixin, BasicModelAdmin): - model = Order # type: ignore - list_display = ( - "human_readable_id", - "user", - "status", - "total_price", - "buy_time", - "modified", - ) - list_filter = ("status", "buy_time", "modified", "created") - search_fields = ("user__email", "status", "uuid", "human_readable_id") - readonly_fields = ( - "total_price", - "total_quantity", - "human_readable_id", - "uuid", - "modified", - "created", - ) - inlines = [OrderProductInline] - form = OrderForm - - general_fields = ["is_active", "user", "status"] - relation_fields = ["promo_code", "billing_address", "shipping_address"] - - -@admin.register(OrderProduct) -class OrderProductAdmin(FieldsetsMixin, BasicModelAdmin): - model = OrderProduct # type: ignore - list_display = ("order", "product", "quantity", "buy_price", "status", "modified") - list_filter = ("status",) - search_fields = ("order__user__email", "product__name") - readonly_fields = ("uuid", "modified", "created") - form = OrderProductForm - - general_fields = ["is_active", "quantity", "buy_price", "status"] - relation_fields = ["order", "product"] - - -@admin.register(PromoCode) -class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin): - model = PromoCode # type: ignore - list_display = ( - "code", - "discount_percent", - "discount_amount", - "start_time", - "end_time", - "used_on", - ) - list_filter = ("discount_percent", "discount_amount", "start_time", "end_time") - search_fields = ("code",) - readonly_fields = ("used_on", "uuid", "modified", "created") - autocomplete_fields = ("user",) - - general_fields = [ - "is_active", - "code", - "discount_amount", - "discount_percent", - "start_time", - "end_time", - "used_on", - ] - relation_fields = ["user"] - - -@admin.register(Promotion) -class PromotionAdmin(FieldsetsMixin, BasicModelAdmin): - model = Promotion # type: ignore - list_display = ("name", "discount_percent", "modified") - search_fields = ("name",) - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ("products",) - - general_fields = ["is_active", "name", "discount_percent", "description"] - relation_fields = ["products"] - - -@admin.register(Stock) -class StockAdmin(FieldsetsMixin, BasicModelAdmin): - model = Stock # type: ignore - list_display = ("product", "vendor", "sku", "quantity", "price", "modified") - list_filter = ("vendor", "quantity") - search_fields = ("product__name", "vendor__name", "sku") - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ("product", "vendor") - - general_fields = [ - "is_active", - "sku", - "quantity", - "price", - "purchase_price", - "digital_asset", - ] - relation_fields = ["product", "vendor"] - - -@admin.register(Wishlist) -class WishlistAdmin(FieldsetsMixin, BasicModelAdmin): - model = Wishlist # type: ignore - list_display = ("user", "modified") - search_fields = ("user__email",) - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "user"] - relation_fields = ["products"] - - -@admin.register(ProductImage) -class ProductImageAdmin(FieldsetsMixin, BasicModelAdmin): - model = ProductImage # type: ignore - list_display = ("alt", "product", "priority", "modified") - list_filter = ("priority",) - search_fields = ("alt", "product__name") - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ("product",) - - general_fields = ["is_active", "alt", "priority", "image"] - relation_fields = ["product"] - - -@admin.register(Address) -class AddressAdmin(FieldsetsMixin, GISModelAdmin): - model = Address # type: ignore - list_display = ("street", "city", "region", "country", "user") - list_filter = ("country", "region") - search_fields = ("street", "city", "postal_code", "user__email") - readonly_fields = ("uuid", "modified", "created") - gis_widget_kwargs = { - "attrs": { - "default_lon": 37.61556, - "default_lat": 55.75222, - "default_zoom": 6, - } - } - - general_fields = [ - "is_active", - "address_line", - "street", - "district", - "city", - "region", - "postal_code", - "country", - "raw_data", - ] - relation_fields = ["user", "api_response"] - - -# Constance configuration -class ConstanceConfig: - class Meta: - app_label = "core" - object_name = "Config" - concrete_model = None - model_name = module_name = "config" - verbose_name_plural = _("Config") - abstract = False - swapped = False - is_composite_pk = False - - def get_change_permission(self): - return f"change_{self.model_name}" - - @property - def app_config(self): - return apps.get_app_config(self.app_label) - - @property - def label(self): - return f"{self.app_label}.{self.object_name}" - - @property - def label_lower(self): - return f"{self.app_label}.{self.model_name}" - - def get_ordered_objects(self): - return False - - _meta = Meta() - - -admin.site.unregister([Config]) # type: ignore -admin.site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore -admin.site.site_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore -admin.site.site_header = "eVibes" -admin.site.index_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore diff --git a/core/api_urls.py b/core/api_urls.py deleted file mode 100644 index da873ef7..00000000 --- a/core/api_urls.py +++ /dev/null @@ -1,87 +0,0 @@ -from django.urls import include, path -from rest_framework.routers import DefaultRouter - -from core.sitemaps import BrandSitemap, CategorySitemap, ProductSitemap -from core.views import ( - CacheOperatorView, - ContactUsView, - GlobalSearchView, - RequestCursedURLView, - SupportedLanguagesView, - WebsiteParametersView, - download_digital_asset_view, - sitemap_detail, - sitemap_index, -) -from core.viewsets import ( - AddressViewSet, - AttributeGroupViewSet, - BrandViewSet, - CategoryViewSet, - FeedbackViewSet, - OrderProductViewSet, - OrderViewSet, - ProductTagViewSet, - ProductViewSet, - PromoCodeViewSet, - PromotionViewSet, - StockViewSet, - VendorViewSet, - WishlistViewSet, -) - -app_name = "core" - -core_router = DefaultRouter() -core_router.register(r"products", ProductViewSet, basename="products") -core_router.register(r"orders", OrderViewSet, basename="orders") -core_router.register(r"wishlists", WishlistViewSet, basename="wishlists") -core_router.register(r"attribute_groups", AttributeGroupViewSet, basename="attribute_groups") -core_router.register(r"brands", BrandViewSet, basename="brands") -core_router.register(r"categories", CategoryViewSet, basename="categories") -core_router.register(r"vendors", VendorViewSet, basename="vendors") -core_router.register(r"feedbacks", FeedbackViewSet, basename="feedbacks") -core_router.register(r"stocks", StockViewSet, basename="stocks") -core_router.register(r"promo_codes", PromoCodeViewSet, basename="promo_codes") -core_router.register(r"promotions", PromotionViewSet, basename="promotions") -core_router.register(r"addresses", AddressViewSet, basename="addresses") -core_router.register(r"product_tags", ProductTagViewSet, basename="product_tags") -core_router.register(r"order_products", OrderProductViewSet, basename="order_products") - -sitemaps = { - "products": ProductSitemap, - "categories": CategorySitemap, - "brands": BrandSitemap, -} - -urlpatterns = [ - path("core/", include(core_router.urls)), - path( - "sitemap.xml", - sitemap_index, - { - "sitemaps": sitemaps, - "sitemap_url_name": "core:sitemap-detail", - }, - name="sitemap-index", - ), - path( - "sitemap-
.xml", - sitemap_detail, - {"sitemaps": sitemaps}, - name="sitemap-detail", - ), - path( - "sitemap-
-.xml", - sitemap_detail, - {"sitemaps": sitemaps}, - name="sitemap-detail", - ), - path("download//", download_digital_asset_view, name="download_digital_asset"), - path("search/", GlobalSearchView.as_view(), name="global_search"), - path("app/cache/", CacheOperatorView.as_view(), name="cache_operator"), - path("app/languages/", SupportedLanguagesView.as_view(), name="supported_languages"), - path("app/parameters/", WebsiteParametersView.as_view(), name="parameters"), - path("app/contact_us/", ContactUsView.as_view(), name="contact_us"), - path("app/request_cursed_url/", RequestCursedURLView.as_view(), name="request_cursed_url"), -] diff --git a/core/elasticsearch/__init__.py b/core/elasticsearch/__init__.py deleted file mode 100644 index 041150b0..00000000 --- a/core/elasticsearch/__init__.py +++ /dev/null @@ -1,312 +0,0 @@ -from django.conf import settings -from django.http import Http404 -from django.shortcuts import get_object_or_404 -from django.utils.text import slugify -from django.utils.translation import gettext_lazy as _ -from django_elasticsearch_dsl import fields -from django_elasticsearch_dsl.registries import registry -from elasticsearch import NotFoundError -from elasticsearch.dsl import Q, Search -from rest_framework.request import Request - -from core.models import Brand, Category, Product - -SMART_FIELDS = [ - "name^6", - "name.ngram^5", - "name.phonetic", - "title^4", - "title.ngram^3", - "title.phonetic", - "description^2", - "description.ngram", - "description.phonetic", - "brand__name^3", - "brand__name.ngram", - "brand__name.auto", - "category__name^2", - "category__name.ngram", - "category__name.auto", -] - -functions = [ - # product-level boosts when searching for products - { - "filter": Q("term", **{"_index": "products"}), - "field_value_factor": { - "field": "brand_priority", - "modifier": "log1p", - "factor": 1.5, - "missing": 0, - }, - }, - { - "filter": Q("term", **{"_index": "products"}), - "field_value_factor": { - "field": "rating", - "modifier": "log1p", - "factor": 2.0, - "missing": 0, - }, - }, - { - "filter": Q("term", **{"_index": "products"}), - "field_value_factor": { - "field": "total_orders", - "modifier": "log1p", - "factor": 3.0, - "missing": 0, - }, - }, - { - "filter": Q("term", **{"_index": "products"}), - "field_value_factor": { - "field": "category_priority", - "modifier": "log1p", - "factor": 1.2, - "missing": 0, - }, - }, - # category-level boost when searching for categories - { - "filter": Q("term", **{"_index": "categories"}), - "field_value_factor": { - "field": "priority", - "modifier": "log1p", - "factor": 2.0, - "missing": 0, - }, - }, - # brand-level boost when searching for brands - { - "filter": Q("term", **{"_index": "brands"}), - "field_value_factor": { - "field": "priority", - "modifier": "log1p", - "factor": 2.0, - "missing": 0, - }, - }, -] - - -def process_query(query: str = "", request: Request | None = None) -> dict[str, list[dict]] | None: - """ - Perform a lenient, typo‑tolerant, multi‑index search. - - * Full‑text with fuzziness for spelling mistakes - * `bool_prefix` for edge‑ngram autocomplete / “icontains” - """ - if not query: - raise ValueError(_("no search term provided.")) - - query = query.strip() - try: - query_base = Q( - "bool", - should=[ - Q( - "multi_match", - query=query, - fields=SMART_FIELDS, - fuzziness="AUTO", - operator="and", - ), - Q( - "multi_match", - query=query, - fields=[f for f in SMART_FIELDS if f.endswith(".auto")], - type="bool_prefix", - ), - ], - minimum_should_match=1, - ) - - function_score_query = Q( - "function_score", - query=query_base, - functions=functions, - boost_mode="multiply", - score_mode="first", - ) - - search = Search(index=["products", "categories", "brands", "posts"]).query(function_score_query).extra(size=100) - response = search.execute() - - results: dict = {"products": [], "categories": [], "brands": [], "posts": []} - for hit in response.hits: - obj_uuid = getattr(hit, "uuid", None) or hit.meta.id - obj_name = getattr(hit, "name", None) or getattr(hit, "title", None) or "N/A" - obj_slug = "" - raw_slug = getattr(hit, "slug", None) - if raw_slug: - obj_slug = raw_slug - elif hit.meta.index == "brands": - obj_slug = slugify(obj_name) - elif hit.meta.index == "categories": - obj_slug = slugify(f"{obj_name}") - - image_url = None - idx = hit.meta.index - if idx == "products" and request: - prod = get_object_or_404(Product, uuid=obj_uuid) - first = prod.images.order_by("priority").first() - if first and first.image: - image_url = request.build_absolute_uri(first.image.url) - elif idx == "brands" and request: - brand = get_object_or_404(Brand, uuid=obj_uuid) - if brand.small_logo: - image_url = request.build_absolute_uri(brand.small_logo.url) - elif idx == "categories" and request: - cat = get_object_or_404(Category, uuid=obj_uuid) - if cat.image: - image_url = request.build_absolute_uri(cat.image.url) - - hit_result = { - "uuid": str(obj_uuid), - "name": obj_name, - "slug": obj_slug, - "image": image_url, - } - - if settings.DEBUG: - if idx == "products": - hit_result["rating_debug"] = getattr(hit, "rating", 0) - hit_result["total_orders_debug"] = getattr(hit, "total_orders", 0) - hit_result["brand_priority_debug"] = getattr(hit, "brand_priority", 0) - hit_result["category_priority_debug"] = getattr(hit, "category_priority", 0) - if idx == "brands": - hit_result["priority_debug"] = getattr(hit, "priority", 0) - if idx == "categories": - hit_result["priority_debug"] = getattr(hit, "priority", 0) - if idx == "posts": - pass - - results[idx].append(hit_result) - - return results - except NotFoundError: - raise Http404 - - -LANGUAGE_ANALYZER_MAP = { - "ar": "arabic", - "cs": "czech", - "da": "danish", - "de": "german", - "en": "english", - "es": "spanish", - "fr": "french", - "hi": "hindi", - "it": "italian", - "ja": "standard", - "kk": "standard", - "nl": "dutch", - "pl": "standard", - "pt": "portuguese", - "ro": "romanian", - "ru": "russian", - "zh": "standard", -} - - -def _lang_analyzer(lang_code: str) -> str: - """Return the best‑guess ES analyzer for an ISO language code.""" - base = lang_code.split("-")[0].lower() - return LANGUAGE_ANALYZER_MAP.get(base, "standard") - - -class ActiveOnlyMixin: - """QuerySet & indexing helpers, so only *active* objects are indexed.""" - - def get_queryset(self): - return super().get_queryset().filter(is_active=True) - - def should_index_object(self, obj): - return getattr(obj, "is_active", False) - - -COMMON_ANALYSIS = { - "filter": { - "edge_ngram_filter": {"type": "edge_ngram", "min_gram": 1, "max_gram": 20}, - "ngram_filter": {"type": "ngram", "min_gram": 2, "max_gram": 20}, - "double_metaphone": { - "type": "phonetic", - "encoder": "double_metaphone", - "replace": False, - }, - }, - "analyzer": { - "autocomplete": { - "tokenizer": "standard", - "filter": ["lowercase", "asciifolding", "edge_ngram_filter"], - }, - "autocomplete_search": { - "tokenizer": "standard", - "filter": ["lowercase", "asciifolding"], - }, - "name_ngram": { - "tokenizer": "standard", - "filter": ["lowercase", "asciifolding", "ngram_filter"], - }, - "name_phonetic": { - "tokenizer": "standard", - "filter": ["lowercase", "asciifolding", "double_metaphone"], - }, - "query_lc": {"tokenizer": "standard", "filter": ["lowercase", "asciifolding"]}, - }, -} - - -def _add_multilang_fields(cls): - """ - Dynamically add multilingual name/description fields and prepare methods to guard against None. - """ - for code, _lang in settings.LANGUAGES: - lc = code.replace("-", "_").lower() - # name_{lc} - name_field = f"name_{lc}" - setattr( - cls, - name_field, - fields.TextField( - attr=name_field, - analyzer=_lang_analyzer(code), - copy_to="name", - fields={ - "raw": fields.KeywordField(ignore_above=256), - "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"), - "phonetic": fields.TextField(analyzer="name_phonetic"), - }, - ), - ) - - # prepare_name_{lc} to ensure no None values - def make_prepare(attr): - return lambda self, instance: getattr(instance, attr, "") or "" - - setattr(cls, f"prepare_{name_field}", make_prepare(name_field)) - - # description_{lc} - desc_field = f"description_{lc}" - setattr( - cls, - desc_field, - fields.TextField( - attr=desc_field, - analyzer=_lang_analyzer(code), - copy_to="description", - fields={ - "raw": fields.KeywordField(ignore_above=256), - "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"), - "phonetic": fields.TextField(analyzer="name_phonetic"), - }, - ), - ) - setattr(cls, f"prepare_{desc_field}", make_prepare(desc_field)) - - -def populate_index(): - for doc in registry.get_documents(set(registry.get_models())): - qs = doc().get_indexing_queryset() - doc().update(qs, parallel=True, refresh=True) diff --git a/core/elasticsearch/documents.py b/core/elasticsearch/documents.py deleted file mode 100644 index cb6af311..00000000 --- a/core/elasticsearch/documents.py +++ /dev/null @@ -1,125 +0,0 @@ -from django_elasticsearch_dsl import Document, fields -from django_elasticsearch_dsl.registries import registry -from health_check.db.models import TestModel - -from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, _add_multilang_fields -from core.models import Brand, Category, Product - - -class _BaseDoc(ActiveOnlyMixin, Document): - name = fields.TextField( - attr="name", - analyzer="standard", - fields={ - "raw": fields.KeywordField(ignore_above=256), - "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"), - "phonetic": fields.TextField(analyzer="name_phonetic"), - "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), - }, - ) - description = fields.TextField( - attr="description", - analyzer="standard", - fields={ - "raw": fields.KeywordField(ignore_above=256), - "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"), - "phonetic": fields.TextField(analyzer="name_phonetic"), - "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), - }, - ) - slug = fields.KeywordField(attr="slug", index=False) - - class Index: - settings = { - "number_of_shards": 1, - "number_of_replicas": 0, - "analysis": COMMON_ANALYSIS, - "index": {"max_ngram_diff": 20}, - } - - def prepare_name(self, instance): - return getattr(instance, "name", "") or "" - - def prepare_description(self, instance): - return getattr(instance, "description", "") or "" - - -class ProductDocument(_BaseDoc): - rating = fields.FloatField(attr="rating") - total_order = fields.IntegerField(attr="total_orders") - brand_priority = fields.IntegerField( - attr="brand.priority", - index=True, - fields={"raw": fields.KeywordField()}, - ) - category_priority = fields.IntegerField( - attr="category.priority", - index=True, - fields={"raw": fields.KeywordField()}, - ) - - class Index(_BaseDoc.Index): - name = "products" - - class Django: - model = Product - fields = ["uuid"] - - -_add_multilang_fields(ProductDocument) -registry.register_document(ProductDocument) - - -class CategoryDocument(_BaseDoc): - priority = fields.IntegerField(attr="priority") - - class Index(_BaseDoc.Index): - name = "categories" - - class Django: - model = Category - fields = ["uuid"] - - -_add_multilang_fields(CategoryDocument) -registry.register_document(CategoryDocument) - - -class BrandDocument(ActiveOnlyMixin, Document): - priority = fields.IntegerField(attr="priority") - - class Index: - name = "brands" - settings = { - "number_of_shards": 1, - "number_of_replicas": 0, - "analysis": COMMON_ANALYSIS, - "index": {"max_ngram_diff": 18}, - } - - class Django: - model = Brand - fields = ["uuid"] - - def prepare_name(self, instance): - return getattr(instance, "name", "") or "" - - -registry.register_document(BrandDocument) - - -class TestModelDocument(Document): - class Index: - name = "testmodels" - - class Django: - model = TestModel - fields = [ - "title", - ] - ignore_signals = True - related_models: list = [] - auto_refresh = False - - -registry.register_document(TestModelDocument) diff --git a/core/graphene/__init__.py b/core/graphene/__init__.py deleted file mode 100644 index d4f3b7db..00000000 --- a/core/graphene/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -from graphene import Mutation - - -class BaseMutation(Mutation): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - @staticmethod - def mutate(**kwargs): - pass diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo deleted file mode 100644 index 7b6f17c5..00000000 Binary files a/core/locale/ar_AR/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/ar_AR/LC_MESSAGES/django.po b/core/locale/ar_AR/LC_MESSAGES/django.po deleted file mode 100644 index 473525b5..00000000 --- a/core/locale/ar_AR/LC_MESSAGES/django.po +++ /dev/null @@ -1,2268 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: ar-ar\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "المعرف الفريد" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "يستخدم المعرف الفريد لتحديد أي كائن قاعدة بيانات بالتأكيد" - -#: core/abstract.py:20 -msgid "is active" -msgstr "نشط" - -#: core/abstract.py:21 -msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "" -"إذا تم تعيينه على خطأ، لا يمكن للمستخدمين رؤية هذا الكائن دون الحاجة إلى إذن" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "تم إنشاؤها" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "عندما ظهر الكائن لأول مرة في قاعدة البيانات" - -#: core/abstract.py:27 -msgid "modified" -msgstr "تم التعديل" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "متى تم تحرير الكائن آخر مرة" - -#: core/admin.py:55 -msgid "translations" -msgstr "الترجمات" - -#: core/admin.py:59 -msgid "general" -msgstr "جنرال لواء" - -#: core/admin.py:61 -msgid "relations" -msgstr "العلاقات" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "البيانات الوصفية" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "الطوابع الزمنية" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "تنشيط المحدد %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s تم تفعيله بنجاح!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "إلغاء تنشيط %(verbose_name_plural)s المحددة" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s تم إلغاء تنشيطه بنجاح." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "قيمة السمة" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "قيم السمات" - -#: core/admin.py:124 -msgid "image" -msgstr "الصورة" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "الصور" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "المخزون" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "الأسهم" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "طلب المنتج" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "اطلب المنتجات" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "الأطفال" - -#: core/admin.py:471 -msgid "Config" -msgstr "التكوين" - -#: core/apps.py:8 -msgid "core" -msgstr "الأساسيات" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "تم الانتهاء" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "التوصيل" - -#: core/choices.py:6 -msgid "delivered" -msgstr "تم التسليم" - -#: core/choices.py:7 -msgid "canceled" -msgstr "تم الإلغاء" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "فشل" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "قيد الانتظار" - -#: core/choices.py:10 -msgid "accepted" -msgstr "مقبولة" - -#: core/choices.py:11 -msgid "money returned" -msgstr "الأموال التي تم إرجاعها" - -#: core/choices.py:17 -msgid "payment" -msgstr "الدفع" - -#: core/choices.py:21 -msgid "momental" -msgstr "مومنتال" - -#: core/choices.py:24 -msgid "successful" -msgstr "ناجح" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "ذاكرة التخزين المؤقت للإدخال/الإخراج" - -#: core/docs/drf/views.py:19 -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 "" -"تطبيق مفتاح فقط لقراءة البيانات المسموح بها من ذاكرة التخزين المؤقت.\n" -"تطبيق مفتاح وبيانات ومهلة مع المصادقة لكتابة البيانات إلى ذاكرة التخزين " -"المؤقت." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "الحصول على قائمة باللغات المدعومة" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "الحصول على معلمات التطبيق القابلة للكشف" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "إرسال رسالة إلى فريق الدعم" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "طلب عنوان URL مرتبط بـ CORSed. مسموح بـ https فقط." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "نقطة نهاية بحث عالمية للاستعلام عبر جداول المشروع" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "شراء طلب شراء كشركة" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"اشترِ طلبًا كعمل تجاري، باستخدام \"المنتجات\" المتوفرة مع \"معرّف_المنتج\" " -"و\"السمات\"." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "سرد كل مجموعات السمات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "استرداد مجموعة سمة واحدة (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "إنشاء مجموعة سمات" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "حذف مجموعة سمات" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "إعادة كتابة مجموعة سمات موجودة تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "إعادة كتابة بعض حقول مجموعة سمات موجودة تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "سرد جميع السمات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "استرداد سمة واحدة (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "إنشاء سمة" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "حذف سمة" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "سرد جميع قيم السمات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "استرداد قيمة سمة واحدة (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "إنشاء قيمة السمة" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "حذف قيمة سمة" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "إعادة كتابة قيمة سمة موجودة تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "إعادة كتابة بعض حقول قيمة سمة موجودة حفظ غير قابل للتعديل" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "قائمة بجميع الفئات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "استرداد فئة واحدة (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "إنشاء فئة" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "حذف فئة" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "قائمة بجميع الفئات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "بالنسبة للمستخدمين من غير الموظفين، يتم إرجاع الطلبات الخاصة بهم فقط." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "تصفية الطلبات ذات وقت_الشراء >= تاريخ ووقت الشراء هذا ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "تصفية الطلبات ذات وقت_الشراء <= تاريخ ووقت الشراء ISO 8601 هذا" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "تصفية حسب الطلب الدقيق UUID" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "التصفية حسب مُعرِّف الطلب المقروء بشريًا بالضبط" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"تصفية حسب البريد الإلكتروني للمستخدم (مطابقة تامة غير حساسة لحالة الأحرف)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "تصفية حسب معرّف المستخدم UUID" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "تصفية حسب حالة الطلب (مطابقة سلسلة فرعية غير حساسة لحالة الأحرف)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"الترتيب حسب واحد من: uuid، معرف_بشري_مقروء، بريد_إلكتروني_مستخدم، مستخدم، " -"حالة، إنشاء، تعديل، وقت_الشراء، عشوائي. البادئة بحرف \"-\" للترتيب التنازلي " -"(على سبيل المثال \"-وقت_الشراء\")." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "استرداد فئة واحدة (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "إنشاء سمة" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "لا يعمل مع المستخدمين من غير الموظفين." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "حذف سمة" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "سعر الشراء وقت الطلب" - -#: core/docs/drf/viewsets.py:233 -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 "" -"ينهي أمر الشراء. إذا تم استخدام \"فرض_الرصيد\"، يتم إكمال عملية الشراء " -"باستخدام رصيد المستخدم؛ إذا تم استخدام \"فرض_الدفع\"، يتم بدء المعاملة." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "شراء طلب شراء بدون إنشاء حساب" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "إنهاء طلب الشراء لمستخدم غير مسجل." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "إضافة منتج إلى الطلب" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "يضيف منتجًا إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "إضافة قائمة بالمنتجات المطلوب طلبها، لن يتم احتساب الكميات" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"يضيف قائمة من المنتجات إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "إزالة منتج من الطلب" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"يزيل منتجًا من أحد الطلبات باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "إزالة منتج من الطلب، لن يتم احتساب الكميات" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"يزيل قائمة من المنتجات من الطلب باستخدام \"معرّف_المنتج\" و\"السمات\" " -"المتوفرة." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "سرد جميع السمات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"بالنسبة للمستخدمين من غير الموظفين، يتم إرجاع قوائم الرغبات الخاصة بهم فقط." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "استرداد سمة واحدة (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "إنشاء سمة" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "لا يعمل مع المستخدمين من غير الموظفين." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "حذف سمة" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "إضافة منتج إلى الطلب" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "يضيف منتجًا إلى قائمة أمنيات باستخدام 'product_uid' المتوفرة" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "إزالة منتج من قائمة الرغبات" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "يزيل منتجًا من قائمة أمنيات باستخدام 'product_uid' المتوفرة" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "إضافة العديد من المنتجات إلى قائمة الرغبات" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"يضيف العديد من المنتجات إلى قائمة الرغبات باستخدام 'product_uids' المتوفرة" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "إزالة منتج من الطلب" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"يزيل العديد من المنتجات من قائمة الرغبات باستخدام 'product_uids' المتوفرة" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"أمثلة: \n" -"'color=exact-red'، 'size=gt-10'، 'features=in-[\"wifi\"،\"bluetooth\"]، " -"'fatures=in-[\"wifi\",\"bluetooth\"],\n" -"\"b64-description=icontains-aGVhdC1jb2xk" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "قائمة بجميع المنتجات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(بالضبط) UUID المنتج" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(أيقونات) اسم المنتج" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(قائمة) أسماء الفئات، غير حساسة لحالة الأحرف" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(بالضبط) معرّف الفئة UUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(قائمة) أسماء العلامات، غير حساسة لحالة الأحرف" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) الحد الأدنى لسعر السهم" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) الحد الأقصى لسعر السهم" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(بالضبط) المنتجات النشطة فقط" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(أيكساكت) اسم العلامة التجارية" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(زط) الحد الأدنى لكمية المخزون" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(بالضبط) الرقمية مقابل المادية" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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، تصنيف، اسم، سبيكة، إنشاء، تعديل، سعر، عشوائي" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "استرداد منتج واحد (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "معرف المنتج UUID أو سبيكة المنتج" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "إنشاء منتج" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "إعادة كتابة منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "تحديث بعض حقول منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "حذف منتج" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "سرد جميع الملاحظات المسموح بها للمنتج" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "قائمة بجميع العناوين" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "استرجاع عنوان واحد" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "إنشاء عنوان جديد" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "حذف عنوان" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "تحديث عنوان كامل" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "تحديث جزئي للعنوان" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "إدخال عنوان الإكمال التلقائي" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"تطبيق docker compose exec تطبيق docker exec الشعر تشغيل إدارة python.py " -"deepl_translate -l en-gb -l ar-ar -l cs-cz -l da-dk -l de-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 nl-nl -l pl-" -"pl -l pt-br -l ro-ro -l ru-ru -l zh-hans -l zh-ans -a core -a geo -a geo -a " -"payments -a vibes_auth -a blog" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "تحديد كمية النتائج، 1 < الحد < 10، الافتراضي: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "سرد جميع الملاحظات (عرض بسيط)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "استرداد تعليق واحد (عرض مفصل)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "إنشاء ملاحظات" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "حذف تعليق" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "إعادة كتابة ملاحظات حالية تحفظ المواد غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "إعادة كتابة بعض حقول الملاحظات الحالية التي تحفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "سرد جميع العلاقات بين الطلب والمنتج (عرض بسيط)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "استرداد علاقة طلب منتج واحد (عرض تفصيلي)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "إنشاء علاقة جديدة بين الطلب والمنتج" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "استبدال علاقة الطلب-المنتج الحالية" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "تحديث جزئي لعلاقة الطلب والمنتج الحالية" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "حذف علاقة الطلب-المنتج" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "لم يتم توفير مصطلح بحث." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "الاسم" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "الفئات" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "الفئات الرخويات" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "الوسوم" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "الحد الأدنى للسعر" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "ماكس برايس" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "نشط" - -#: core/filters.py:70 -msgid "Brand" -msgstr "العلامة التجارية" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "السمات" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "الكمية" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "سبيكة" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "هو رقمي" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "تضمين الفئات الفرعية" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "تم الشراء بعد (شامل)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "تم الشراء من قبل (شامل)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "البريد الإلكتروني للمستخدم" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "معرّف المستخدم UUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "الحالة" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "معرّف قابل للقراءة من قبل الإنسان" - -#: core/filters.py:354 -msgid "Parent" -msgstr "الوالدين" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)" - -#: core/filters.py:362 -msgid "Level" -msgstr "المستوى" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID المنتج" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "" -"مفتاح للبحث عنه في ذاكرة التخزين المؤقت أو تعيينه في ذاكرة التخزين المؤقت" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "البيانات المراد تخزينها في ذاكرة التخزين المؤقت" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "المهلة بالثواني لتعيين البيانات في ذاكرة التخزين المؤقت" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "البيانات المخزنة مؤقتاً" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "إضافة منتج إلى الطلب" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "الطلب {order_uuid} غير موجود" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "إزالة منتج من الطلب" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "إزالة جميع المنتجات من الطلب" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "شراء طلبية" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "تنفيذ إجراء على قائمة من المنتجات بالترتيب" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "إزالة/إضافة" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "إضافة منتج إلى الطلب" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "قائمة الأمنيات {wishlist_uuid} غير موجودة" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "إزالة منتج من الطلب" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "إزالة منتج من الطلب" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "إزالة منتج من الطلب" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "شراء طلبية" - -#: core/graphene/mutations.py:456 -msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr1=قيمة1، attr2=قيمة2" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} غير موجود: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "يجب أن يكون الحد بين 1 و10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - يعمل مثل السحر" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "السمات" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "السمات المجمعة" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "مجموعات السمات" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "الفئات" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "العلامات التجارية" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "الفئات" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "النسبة المئوية للترميز" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "ما هي السمات والقيم التي يمكن استخدامها لتصفية هذه الفئة." - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "" -"الحد الأدنى والحد الأقصى لأسعار المنتجات في هذه الفئة، إذا كانت متوفرة." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "العلامات الخاصة بهذه الفئة" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "المنتجات في هذه الفئة" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "البائعون" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "خط العرض (الإحداثي Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "خط الطول (الإحداثي X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "كيفية" - -#: core/graphene/object_types.py:262 -msgid "rating value from 1 to 10, inclusive, or 0 if not set." -msgstr "قيمة التصنيف من 1 إلى 10، شاملة، أو 0 إذا لم يتم تعيينها." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "يمثل ملاحظات من المستخدم." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "الإشعارات" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "قائمة بطلب المنتجات بهذا الترتيب" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "عنوان إرسال الفواتير" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"عنوان الشحن لهذا الطلب، اترك العنوان فارغًا إذا كان هو نفسه عنوان إرسال " -"الفواتير أو إذا لم يكن منطبقًا" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "السعر الإجمالي لهذا الطلب" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "إجمالي كمية المنتجات بالترتيب" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "هل جميع المنتجات في الطلب رقمي" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "الطلبات" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "رابط الصورة" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "صور المنتج" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "الفئة" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "الملاحظات" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "العلامة التجارية" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "مجموعات السمات" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "السعر" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "الكمية" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "عدد الملاحظات" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "المنتجات" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "الرموز الترويجية" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "المنتجات المعروضة للبيع" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "العروض الترويجية" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "البائع" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "المنتج" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "المنتجات المفضلة" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "قوائم التمنيات" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "المنتجات الموسومة" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "علامات المنتج" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "الفئات الموسومة" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "علامات الفئات" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "اسم المشروع" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "البريد الإلكتروني للشركة" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "اسم الشركة" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "عنوان الشركة" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "رقم هاتف الشركة" - -#: core/graphene/object_types.py:506 -msgid "email from, sometimes it must be used instead of host user value" -msgstr "" -"\"البريد الإلكتروني من\"، في بعض الأحيان يجب استخدامه بدلاً من قيمة المستخدم " -"المضيف" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "مستخدم البريد الإلكتروني المضيف" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "الحد الأقصى لمبلغ السداد" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "الحد الأدنى لمبلغ السداد" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "بيانات التحليلات" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "بيانات الإعلانات" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "التكوين" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "رمز اللغة" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "اسم اللغة" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "علم اللغة، إذا كان موجوداً :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "الحصول على قائمة باللغات المدعومة" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "نتائج البحث عن المنتجات" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "نتائج البحث عن المنتجات" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "والد هذه المجموعة" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "مجموعة السمات الرئيسية" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "اسم مجموعة السمات" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "مجموعة السمات" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات " -"الخاصة بالمورّد" - -#: core/models.py:148 -msgid "authentication info" -msgstr "معلومات المصادقة" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "نسبة هامش الربح للبائع" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "اسم هذا البائع" - -#: core/models.py:159 -msgid "vendor name" -msgstr "اسم البائع" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "معرّف العلامة الداخلي لعلامة المنتج" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "اسم العلامة" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "اسم سهل الاستخدام لعلامة المنتج" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "اسم عرض العلامة" - -#: core/models.py:213 -msgid "product tag" -msgstr "علامة المنتج" - -#: core/models.py:251 -msgid "category tag" -msgstr "علامة الفئة" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "علامات الفئة" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "تحميل صورة تمثل هذه الفئة" - -#: core/models.py:332 -msgid "category image" -msgstr "صورة الفئة" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "أصل هذه الفئة لتكوين بنية هرمية" - -#: core/models.py:347 -msgid "parent category" -msgstr "الفئة الرئيسية" - -#: core/models.py:352 -msgid "category name" -msgstr "اسم الفئة" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "تقديم اسم لهذه الفئة" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "إضافة وصف تفصيلي لهذه الفئة" - -#: core/models.py:361 -msgid "category description" -msgstr "وصف الفئة" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "الأولوية" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "اسم هذه العلامة التجارية" - -#: core/models.py:430 -msgid "brand name" -msgstr "اسم العلامة التجارية" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "تحميل شعار يمثل هذه العلامة التجارية" - -#: core/models.py:439 -msgid "brand small image" -msgstr "صورة العلامة التجارية الصغيرة" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" - -#: core/models.py:447 -msgid "brand big image" -msgstr "صورة كبيرة للعلامة التجارية" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "إضافة وصف تفصيلي للعلامة التجارية" - -#: core/models.py:453 -msgid "brand description" -msgstr "وصف العلامة التجارية" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" - -#: core/models.py:459 -msgid "associated categories" -msgstr "الفئات" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "الفئة التي ينتمي إليها هذا المنتج" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" - -#: core/models.py:549 -msgid "is product digital" -msgstr "هل المنتج رقمي" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "توفير اسم تعريفي واضح للمنتج" - -#: core/models.py:556 -msgid "product name" -msgstr "اسم المنتج" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "إضافة وصف تفصيلي للمنتج" - -#: core/models.py:562 -msgid "product description" -msgstr "وصف المنتج" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "رقم الجزء لهذا المنتج" - -#: core/models.py:570 -msgid "part number" -msgstr "رقم الجزء" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "فئة هذه السمة" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "مجموعة هذه السمة" - -#: core/models.py:690 -msgid "string" -msgstr "الخيط" - -#: core/models.py:691 -msgid "integer" -msgstr "عدد صحيح" - -#: core/models.py:692 -msgid "float" -msgstr "تعويم" - -#: core/models.py:693 -msgid "boolean" -msgstr "منطقية" - -#: core/models.py:694 -msgid "array" -msgstr "المصفوفة" - -#: core/models.py:695 -msgid "object" -msgstr "الكائن" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "نوع قيمة السمة" - -#: core/models.py:698 -msgid "value type" -msgstr "نوع القيمة" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "اسم هذه السمة" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "اسم السمة" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "السمة" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "سمة هذه القيمة" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "المنتج المرتبط" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "القيمة المحددة لهذه السمة" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "توفير نص بديل للصورة لإمكانية الوصول" - -#: core/models.py:795 -msgid "image alt text" -msgstr "النص البديل للصورة" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "تحميل ملف الصورة لهذا المنتج" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "صورة المنتج" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "يحدد الترتيب الذي يتم عرض الصور به" - -#: core/models.py:806 -msgid "display priority" -msgstr "أولوية العرض" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "المنتج الذي تمثله هذه الصورة" - -#: core/models.py:825 -msgid "product images" -msgstr "صور المنتج" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "النسبة المئوية للخصم على المنتجات المختارة" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "نسبة الخصم" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "تقديم اسم فريد لهذا العرض الترويجي" - -#: core/models.py:873 -msgid "promotion name" -msgstr "اسم الترقية" - -#: core/models.py:879 -msgid "promotion description" -msgstr "وصف الترقية" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" - -#: core/models.py:885 -msgid "included products" -msgstr "المنتجات المشمولة" - -#: core/models.py:889 -msgid "promotion" -msgstr "الترقية" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "البائع الذي يورد هذا المنتج المخزون" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "البائع المرتبط" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "السعر النهائي للعميل بعد هوامش الربح" - -#: core/models.py:930 -msgid "selling price" -msgstr "سعر البيع" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "المنتج المرتبط بإدخال المخزون هذا" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "السعر المدفوع للبائع مقابل هذا المنتج" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "سعر الشراء من البائع" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "الكمية المتوفرة من المنتج في المخزون" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "الكمية في المخزون" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "SKU المعين من قبل البائع لتحديد المنتج" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "وحدة تخزين البائع" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" - -#: core/models.py:961 -msgid "digital file" -msgstr "ملف رقمي" - -#: core/models.py:970 -msgid "stock entries" -msgstr "إدخالات المخزون" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "مالك قائمة الرغبات" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "قائمة الرغبات" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} غير موجود: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "فيلم وثائقي" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "الأفلام الوثائقية" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "لم يتم حلها" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "سطر العنوان للعميل" - -#: core/models.py:1129 -msgid "address line" -msgstr "سطر العنوان" - -#: core/models.py:1131 -msgid "street" -msgstr "الشارع" - -#: core/models.py:1132 -msgid "district" -msgstr "المنطقة" - -#: core/models.py:1133 -msgid "city" -msgstr "المدينة" - -#: core/models.py:1134 -msgid "region" -msgstr "المنطقة" - -#: core/models.py:1135 -msgid "postal code" -msgstr "الرمز البريدي" - -#: core/models.py:1136 -msgid "country" -msgstr "البلد" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" - -#: core/models.py:1159 -msgid "address" -msgstr "العنوان" - -#: core/models.py:1160 -msgid "addresses" -msgstr "العناوين" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "معرّف الرمز الترويجي" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "مبلغ الخصم الثابت" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "النسبة المئوية للخصم" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "وقت انتهاء الصلاحية" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "وقت بدء الصلاحية" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "الطابع الزمني للاستخدام" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "المستخدم المعين" - -#: core/models.py:1252 -msgid "promo code" -msgstr "الرمز الترويجي" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "الرموز الترويجية" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين " -"أو لا هذا ولا ذاك." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "تم استخدام الرمز الترويجي بالفعل" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "الرمز الترويجي المطبق" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "عنوان الشحن المستخدم لهذا الطلب" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "عنوان الشحن" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "الحالة الحالية للطلب في دورة حياته" - -#: core/models.py:1349 -msgid "order status" -msgstr "حالة الطلب" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " -"استخدام عرض الجدول" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "المستخدم الذي قدم الطلب" - -#: core/models.py:1367 -msgid "user" -msgstr "المستخدم" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "الطابع الزمني عند الانتهاء من الطلب" - -#: core/models.py:1374 -msgid "buy time" -msgstr "وقت الشراء" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "معرّف يمكن قراءته من قبل البشر" - -#: core/models.py:1388 -msgid "order" -msgstr "الطلب" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} غير موجود مع الاستعلام <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "الرمز الترويجي غير موجود" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "العنوان غير موجود" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "قيمة القوة غير صالحة" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "لا يمكنك شراء طلبية فارغة!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "عدم كفاية الأموال لإكمال الطلب" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد " -"الإلكتروني للعميل، رقم هاتف العميل" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "سعر الشراء وقت الطلب" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "التعليقات الداخلية" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "إشعارات المستخدم" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "تمثيل JSON لسمات هذا العنصر" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "سمات المنتج المطلوبة" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" - -#: core/models.py:1758 -msgid "parent order" -msgstr "ترتيب الوالدين" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "المنتج المحدد المرتبط بخط الطلب هذا" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "كمية هذا المنتج المحدد في الطلب" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "كمية المنتج" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "الحالة الحالية لهذا المنتج بالترتيب" - -#: core/models.py:1783 -msgid "product line status" -msgstr "حالة خط الإنتاج" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "إجراء خاطئ محدد للتغذية الراجعة: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" - -#: core/models.py:1882 -msgid "download" -msgstr "تنزيل" - -#: core/models.py:1883 -msgid "downloads" -msgstr "التنزيلات" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "لا يمكنك تنزيل أصل رقمي لطلب غير مكتمل" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "تعليقات على الملاحظات" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" - -#: core/models.py:1930 -msgid "related order product" -msgstr "منتجات الطلبات ذات الصلة" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "التصنيف المعين من قبل المستخدم للمنتج" - -#: core/models.py:1936 -msgid "product rating" -msgstr "تصنيف المنتج" - -#: core/models.py:1944 -msgid "feedback" -msgstr "الملاحظات" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "يجب عليك تقديم تعليق، وتقييم، وطلب المنتج uuid لإضافة ملاحظاتك." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "خطأ أثناء إنشاء الرمز الترويجي: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "تأكيد الطلب" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "الشعار" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "مرحبًا %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"شكرًا لك على طلبك #%(order.pk)s! يسعدنا إبلاغك بأننا قد أخذنا طلبك في العمل. " -"فيما يلي تفاصيل طلبك:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "الإجمالي" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "السعر الإجمالي" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -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." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "مع أطيب التحيات، فريق عمل %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "جميع الحقوق محفوظة" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "تم تسليم الطلب" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "مرحباً %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "لقد قمنا بمعالجة طلبك بنجاح №%(order_uuid)s__! فيما يلي تفاصيل طلبك:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"معلومات إضافية\n" -" معلومات إضافية" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "القيمة" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"إذا كانت لديك أي أسئلة، فلا تتردد في الاتصال بدعمنا على %(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "مع أطيب التحيات، فريق عمل %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "المفتاح" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" -" the details of your order:" -msgstr "شكرًا لك على طلبك! يسعدنا تأكيد طلبك. فيما يلي تفاصيل طلبك:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "سعر الشحن" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "سيتم توصيل طلبك إلى العنوان التالي:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "مع أطيب تحياتي،
فريق عمل %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"جميع الحقوق\n" -" محفوظة" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "كل من البيانات والمهلة مطلوبة" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "يجب أن يكون {model} نموذجًا" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "يجب أن تكون {data} كائن قائمة" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | بدء الاتصال بنا" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | تأكيد الطلب" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | تم تسليم الطلب" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "يجب تكوين معلمة NOMINATIM_URL!" - -#: 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} بكسل" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "تنسيق رقم الهاتف غير صالح" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "الرمز المفضل غير موجود" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "خطأ في الترميز الجغرافي: {e}" diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo deleted file mode 100644 index a6208ad4..00000000 Binary files a/core/locale/cs_CZ/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.po b/core/locale/cs_CZ/LC_MESSAGES/django.po deleted file mode 100644 index 100f23b2..00000000 --- a/core/locale/cs_CZ/LC_MESSAGES/django.po +++ /dev/null @@ -1,2302 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: cs-cz\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Jedinečné ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"Jedinečné ID slouží k jisté identifikaci jakéhokoli databázového objektu." - -#: core/abstract.py:20 -msgid "is active" -msgstr "Je aktivní" - -#: core/abstract.py:21 -msgid "" -"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í." - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Vytvořeno" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Kdy se objekt poprvé objevil v databázi" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Upraveno" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Kdy byl objekt naposledy upraven" - -#: core/admin.py:55 -msgid "translations" -msgstr "Překlady" - -#: core/admin.py:59 -msgid "general" -msgstr "Obecné" - -#: core/admin.py:61 -msgid "relations" -msgstr "Vztahy" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadata" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Časová razítka" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Aktivovat vybrané %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s úspěšně aktivován!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Deaktivovat vybrané %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s byl úspěšně deaktivován." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Hodnota atributu" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Hodnoty atributů" - -#: core/admin.py:124 -msgid "image" -msgstr "Obrázek" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Obrázky" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stock" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Zásoby" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Objednat produkt" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Objednat produkty" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Děti" - -#: core/admin.py:471 -msgid "Config" -msgstr "Konfigurace" - -#: core/apps.py:8 -msgid "core" -msgstr "Jádro" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Dokončeno" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Poskytování služeb" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Doručeno na" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Zrušeno" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Neúspěšný" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "Čeká se na" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Přijato" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Vrácené peníze" - -#: core/choices.py:17 -msgid "payment" -msgstr "Platba" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Úspěšné" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Vstup/výstup mezipaměti" - -#: core/docs/drf/views.py:19 -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 "" -"Použijte pouze klíč pro čtení povolených dat z mezipaměti.\n" -"Pro zápis dat do mezipaměti použijte klíč, data a časový limit s ověřením." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Získat seznam podporovaných jazyků" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Získání vystavitelných parametrů aplikace" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Odeslání zprávy týmu podpory" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Vyžádejte si adresu URL s protokolem CORS. Povoleno pouze https." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" -"Globální koncový bod vyhledávání pro dotazování napříč tabulkami projektu" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Zakoupit objednávku jako firma" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Zakoupit objednávku jako podnik s použitím zadaných `produktů` s " -"`product_uuid` a `atributy`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Seznam všech skupin atributů (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Získání jedné skupiny atributů (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Vytvoření skupiny atributů" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Odstranění skupiny atributů" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Přepsání existující skupiny atributů s uložením neupravitelných položek" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Seznam všech atributů (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Získání jednoho atributu (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Vytvoření atributu" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Odstranění atributu" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Přepsat existující atribut a uložit neupravitelné položky" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Přepsání některých polí existujícího atributu s uložením neupravitelných " -"položek" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Seznam všech hodnot atributů (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Získání jedné hodnoty atributu (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Vytvoření hodnoty atributu" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Odstranění hodnoty atributu" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "Přepsání existující hodnoty atributu uložením neupravitelných položek" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Seznam všech kategorií (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Vyhledání jedné kategorie (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Vytvoření kategorie" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Odstranění kategorie" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Přepsání existující kategorie ukládající neupravitelné položky" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Přepsat některá pole existující kategorie a uložit neupravitelné položky" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Seznam všech kategorií (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Uživatelům, kteří nejsou zaměstnanci, se vracejí pouze jejich vlastní " -"objednávky." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtrování příkazů s buy_time >= toto datum ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtrování objednávek s buy_time <= toto ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtrování podle přesné objednávky UUID" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtrování podle přesného lidsky čitelného ID objednávky" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filtrování podle e-mailu uživatele (přesná shoda bez rozlišení velkých a " -"malých písmen)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrování podle UUID uživatele" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Filtrování podle stavu objednávky (shoda podřetězce bez rozlišování velkých " -"a malých písmen)" - -#: core/docs/drf/viewsets.py:201 -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')." -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é " -"řazení použijte předponu \"-\" (např. \"-buy_time\")." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Vyhledání jedné kategorie (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Vytvoření atributu" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Odstranění atributu" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Přepsání existující kategorie ukládající neupravitelné položky" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Přepsat některá pole existující kategorie a uložit neupravitelné položky" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Nákupní cena v době objednávky" - -#: core/docs/drf/viewsets.py:233 -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 "" -"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." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "zakoupení objednávky bez vytvoření účtu" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "dokončí nákup objednávky pro neregistrovaného uživatele." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Přidání produktu do objednávky" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Přidá produkt do objednávky pomocí zadaného `product_uuid` a `attributes`." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Přidat seznam produktů k objednání, množství se nezapočítává." - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Přidá seznam produktů do objednávky pomocí zadaného `product_uuid` a " -"`attributes`." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Odstranění produktu z objednávky" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Odebere produkt z objednávky pomocí zadaného `product_uuid` a `attributes`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Odstranění produktu z objednávky, množství se nezapočítává" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Odebere seznam produktů z objednávky pomocí zadaného `product_uuid` a " -"`attributes`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Seznam všech atributů (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Uživatelům, kteří nejsou zaměstnanci, se vrátí pouze jejich vlastní seznamy " -"přání." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Získání jednoho atributu (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Vytvoření atributu" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Odstranění atributu" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Přepsat existující atribut a uložit neupravitelné položky" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Přepsání některých polí existujícího atributu s uložením neupravitelných " -"položek" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Přidání produktu do objednávky" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "Přidá produkt do seznamu přání pomocí zadaného `product_uuid`." - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Odstranění produktu ze seznamu přání" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "Odebere produkt ze seznamu přání pomocí zadaného `product_uuid`." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Přidání mnoha produktů do seznamu přání" - -#: core/docs/drf/viewsets.py:320 -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`." - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Odstranění produktu z objednávky" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Odebere mnoho produktů ze seznamu přání pomocí zadaných `product_uuids`." - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Příklady: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Seznam všech produktů (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(přesně) UUID produktu" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Název produktu" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(seznam) Názvy kategorií, nerozlišuje velká a malá písmena" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(přesně) Kategorie UUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(seznam) Názvy značek, nerozlišuje velká a malá písmena" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimální cena akcií" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximální cena akcií" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(přesně) Pouze aktivní produkty" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Obchodní značka" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimální skladové množství" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(přesně) Digitální vs. fyzické" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Povolené:** uuid, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Vyhledání jednoho produktu (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "Identifikátor UUID produktu nebo Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Vytvoření produktu" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "" -"Přepsání existujícího produktu se zachováním polí, která nelze editovat" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Aktualizace některých polí existujícího produktu se zachováním polí, která " -"nelze upravovat." - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Odstranění produktu" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "seznam všech povolených zpětných vazeb pro produkt" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Seznam všech adres" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Získání jedné adresy" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Vytvoření nové adresy" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Odstranění adresy" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Aktualizace celé adresy" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Částečná aktualizace adresy" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Automatické dokončování zadávání adresy" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Řetězec dotazu na nezpracovaná data, doplňte prosím data z koncového bodu " -"geo-IP" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "omezuje množství výsledků, 1 < limit < 10, výchozí: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "seznam všech ohlasů (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "načtení jedné zpětné vazby (podrobné zobrazení)." - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "vytvořit zpětnou vazbu" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "odstranit zpětnou vazbu" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "přepsat existující zpětnou vazbu a uložit neupravitelné položky." - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Přepsat některá pole existující kategorie a uložit neupravitelné položky" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "seznam všech vztahů objednávka-produkt (jednoduché zobrazení)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "načtení jednoho vztahu zakázka-produkt (podrobné zobrazení)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "vytvořit nový vztah objednávka-produkt" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "nahradit existující vztah objednávka-produkt" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "částečně aktualizovat existující vztah objednávka-produkt" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "odstranit vztah objednávka-produkt" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Nebyl zadán žádný vyhledávací termín." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Název" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Kategorie" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Kategorie Slimáci" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Štítky" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Minimální cena" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Max Price" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Je aktivní" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Značka" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Atributy" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Množství" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Slug" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Je digitální" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Zahrnout podkategorie" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Pro použití příznaku include_subcategories musí existovat category_uuid." - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Koupeno po (včetně)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Koupeno před (včetně)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "E-mail uživatele" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID uživatele" - -#: core/filters.py:289 -msgid "Status" -msgstr "Stav" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Lidsky čitelné ID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Rodič" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Úroveň" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID produktu" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Klíč k vyhledání v keši nebo nastavení do keše" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Data k uložení do mezipaměti" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Časový limit v sekundách pro nastavení dat do mezipaměti" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Data uložená v mezipaměti" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Kamelizovaná data JSON z požadované adresy URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Přidání produktu do objednávky" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Objednávka {order_uuid} nebyla nalezena" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Odstranění produktu z objednávky" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Odstranění všech produktů z objednávky" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Koupit objednávku" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Zadejte prosím order_uuid nebo order_hr_id - vzájemně se vylučují!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Provedení akce na seznamu produktů v objednávce" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Odebrat/přidat" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Akce musí být buď \"přidat\", nebo \"odebrat\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Přidání produktu do objednávky" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Seznam přání {wishlist_uuid} nebyl nalezen" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Odstranění produktu z objednávky" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Odstranění produktu z objednávky" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Odstranění produktu z objednávky" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Koupit objednávku" - -#: core/graphene/mutations.py:456 -msgid "" -"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." - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Původní řetězec adresy zadaný uživatelem" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} neexistuje: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Limit musí být mezi 1 a 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - funguje jako kouzlo" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Atributy" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Seskupené atributy" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Skupiny atributů" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Kategorie" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Značky" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Kategorie" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Procento přirážky" - -#: core/graphene/object_types.py:129 -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." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Štítky pro tuto kategorii" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Produkty v této kategorii" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Prodejci" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Zeměpisná šířka (souřadnice Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Zeměpisná délka (souřadnice X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Jak na to" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Představuje zpětnou vazbu od uživatele." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Oznámení" - -#: core/graphene/object_types.py:275 -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é" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Seznam objednaných produktů v tomto pořadí" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Fakturační adresa" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Dodací adresa pro tuto objednávku, pokud je stejná jako fakturační adresa " -"nebo pokud není použitelná, ponechte prázdné." - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Celková cena této objednávky" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Celkové množství objednaných produktů" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Jsou všechny produkty v objednávce digitální" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Objednávky" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Adresa URL obrázku" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Obrázky produktu" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Kategorie" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Zpětná vazba" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Značka" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Skupiny atributů" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Cena" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Množství" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Počet zpětných vazeb" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Produkty" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Propagační kódy" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Produkty v prodeji" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Propagační akce" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Prodejce" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Produkt" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Produkty uvedené na seznamu přání" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Seznamy přání" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Produkty s příznakem" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Štítky produktu" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Kategorie s příznakem" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Štítky kategorií" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Název projektu" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "E-mail společnosti" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Název společnosti" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Adresa společnosti" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Telefonní číslo společnosti" - -#: core/graphene/object_types.py:506 -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." - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Uživatel hostitelského e-mailu" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Maximální částka pro platbu" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Minimální částka pro platbu" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Analytická data" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Reklamní údaje" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Konfigurace" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Kód jazyka" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Název jazyka" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Příznak jazyka, pokud existuje :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Získat seznam podporovaných jazyků" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Výsledky vyhledávání produktů" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Výsledky vyhledávání produktů" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Rodič této skupiny" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Nadřazená skupina atributů" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Název skupiny atributů" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Skupina atributů" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Ukládá pověření a koncové body potřebné pro komunikaci s rozhraním API " -"dodavatele." - -#: core/models.py:148 -msgid "authentication info" -msgstr "Informace o ověřování" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Definice přirážky pro produkty získané od tohoto dodavatele" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Procento přirážky prodejce" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Název tohoto prodejce" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Název prodejce" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Interní identifikátor značky produktu" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Název štítku" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Uživatelsky přívětivý název pro značku produktu" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Zobrazení názvu štítku" - -#: core/models.py:213 -msgid "product tag" -msgstr "Štítek produktu" - -#: core/models.py:251 -msgid "category tag" -msgstr "značka kategorie" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "štítky kategorií" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Nahrát obrázek reprezentující tuto kategorii" - -#: core/models.py:332 -msgid "category image" -msgstr "Obrázek kategorie" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Definovat procento přirážky pro produkty v této kategorii." - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu." - -#: core/models.py:347 -msgid "parent category" -msgstr "Nadřazená kategorie" - -#: core/models.py:352 -msgid "category name" -msgstr "Název kategorie" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Uveďte název této kategorie" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Přidejte podrobný popis této kategorie" - -#: core/models.py:361 -msgid "category description" -msgstr "Popis kategorie" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Priorita" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Název této značky" - -#: core/models.py:430 -msgid "brand name" -msgstr "Název značky" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Nahrát logo reprezentující tuto značku" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Malý obrázek značky" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Nahrát velké logo reprezentující tuto značku" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Velká image značky" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Přidejte podrobný popis značky" - -#: core/models.py:453 -msgid "brand description" -msgstr "Popis značky" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Volitelné kategorie, se kterými je tato značka spojena" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Kategorie" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Kategorie, do které tento produkt patří" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Volitelně přiřadit tento produkt ke značce" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Označuje, zda je tento produkt dodáván digitálně" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Je produkt digitální" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Uveďte jasný identifikační název výrobku" - -#: core/models.py:556 -msgid "product name" -msgstr "Název produktu" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Přidejte podrobný popis produktu" - -#: core/models.py:562 -msgid "product description" -msgstr "Popis produktu" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Číslo dílu pro tento produkt" - -#: core/models.py:570 -msgid "part number" -msgstr "Číslo dílu" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Kategorie tohoto atributu" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Skupina tohoto atributu" - -#: core/models.py:690 -msgid "string" -msgstr "Řetězec" - -#: core/models.py:691 -msgid "integer" -msgstr "Celé číslo" - -#: core/models.py:692 -msgid "float" -msgstr "Float" - -#: core/models.py:693 -msgid "boolean" -msgstr "Boolean" - -#: core/models.py:694 -msgid "array" -msgstr "Pole" - -#: core/models.py:695 -msgid "object" -msgstr "Objekt" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Typ hodnoty atributu" - -#: core/models.py:698 -msgid "value type" -msgstr "Typ hodnoty" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Název tohoto atributu" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Název atributu" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Atribut" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Atribut této hodnoty" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Související produkt" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "Konkrétní hodnota tohoto atributu" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." - -#: core/models.py:795 -msgid "image alt text" -msgstr "Text alt obrázku" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Nahrát soubor s obrázkem tohoto produktu" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Obrázek produktu" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Určuje pořadí, v jakém se obrázky zobrazují." - -#: core/models.py:806 -msgid "display priority" -msgstr "Priorita zobrazení" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Výrobek, který tento obrázek představuje" - -#: core/models.py:825 -msgid "product images" -msgstr "Obrázky produktů" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Procentuální sleva na vybrané produkty" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Procento slevy" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Uveďte jedinečný název této propagační akce" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Název akce" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Popis propagace" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Vyberte, které produkty jsou zahrnuty do této akce" - -#: core/models.py:885 -msgid "included products" -msgstr "Zahrnuté produkty" - -#: core/models.py:889 -msgid "promotion" -msgstr "Propagace" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Prodejce dodávající tento výrobek na sklad" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Přidružený prodejce" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Konečná cena pro zákazníka po přirážkách" - -#: core/models.py:930 -msgid "selling price" -msgstr "Prodejní cena" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Produkt spojený s touto skladovou položkou" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Cena zaplacená prodejci za tento výrobek" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Kupní cena prodejce" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Dostupné množství produktu na skladě" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Množství na skladě" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "SKU přidělený prodejcem pro identifikaci výrobku" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU prodejce" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Digitální soubor spojený s touto zásobou, je-li to vhodné" - -#: core/models.py:961 -msgid "digital file" -msgstr "Digitální soubor" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Zápisy do zásob" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Výrobky, které uživatel označil jako požadované" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Uživatel, který vlastní tento seznam přání" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Majitel seznamu přání" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Seznam přání" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} neexistuje: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Dokumentární film" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Dokumentární filmy" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Nevyřešené" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Adresní řádek pro zákazníka" - -#: core/models.py:1129 -msgid "address line" -msgstr "Adresní řádek" - -#: core/models.py:1131 -msgid "street" -msgstr "Ulice" - -#: core/models.py:1132 -msgid "district" -msgstr "Okres" - -#: core/models.py:1133 -msgid "city" -msgstr "Město" - -#: core/models.py:1134 -msgid "region" -msgstr "Region" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Poštovní směrovací číslo" - -#: core/models.py:1136 -msgid "country" -msgstr "Země" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Uložená odpověď JSON ze služby geokódování" - -#: core/models.py:1159 -msgid "address" -msgstr "Adresa" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adresy" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Jedinečný kód, který uživatel použije k uplatnění slevy." - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Identifikátor propagačního kódu" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Pevná výše slevy, pokud není použito procento" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Pevná výše slevy" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Procentuální sleva uplatněná v případě nevyužití pevné částky" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Procentuální sleva" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Časové razítko ukončení platnosti promokódu" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Doba ukončení platnosti" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Časové razítko, od kterého je tento promokód platný" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Čas zahájení platnosti" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "Časové razítko použití promokódu, prázdné, pokud ještě nebyl použit." - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Časové razítko použití" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Uživatel přiřazený k tomuto promokódu, je-li to relevantní" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Přiřazený uživatel" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Propagační kód" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Propagační kódy" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Měl by být definován pouze jeden typ slevy (částka nebo procento), nikoli " -"však oba typy slev nebo žádný z nich." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Promo kód byl již použit" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Neplatný typ slevy pro promocode {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "Fakturační adresa použitá pro tuto objednávku" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Volitelný promo kód použitý na tuto objednávku" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Použitý promo kód" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "Dodací adresa použitá pro tuto objednávku" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Dodací adresa" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Aktuální stav zakázky v jejím životním cyklu" - -#: core/models.py:1349 -msgid "order status" -msgstr "Stav objednávky" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"JSON struktura oznámení pro zobrazení uživatelům, v uživatelském rozhraní " -"administrátora se používá tabulkové zobrazení." - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "Uživatel, který zadal objednávku" - -#: core/models.py:1367 -msgid "user" -msgstr "Uživatel" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Časové razítko, kdy byla objednávka dokončena." - -#: core/models.py:1374 -msgid "buy time" -msgstr "Kupte si čas" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Lidsky čitelný identifikátor objednávky" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "lidsky čitelné ID" - -#: core/models.py:1388 -msgid "order" -msgstr "Objednávka" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Uživatel smí mít vždy pouze jednu čekající objednávku!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "Do objednávky, která není v procesu vyřizování, nelze přidat produkty." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Do objednávky nelze přidat neaktivní produkty" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "Nelze přidat více produktů, než je dostupné na skladě" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "Nelze odebrat produkty z objednávky, která není nevyřízená." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} neexistuje s dotazem <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Promo kód neexistuje" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "Fyzické produkty můžete zakoupit pouze se zadanou dodací adresou!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Adresa neexistuje" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"V tuto chvíli nemůžete nakupovat, zkuste to prosím znovu za několik minut." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Neplatná hodnota síly" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Nelze zakoupit prázdnou objednávku!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Nedostatek finančních prostředků na dokončení objednávky" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"bez registrace nelze nakupovat, uveďte prosím následující údaje: jméno " -"zákazníka, e-mail zákazníka, telefonní číslo zákazníka." - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Neplatný způsob platby: {payment_method} z {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "Cena, kterou zákazník zaplatil za tento produkt v době nákupu." - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Nákupní cena v době objednávky" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Interní připomínky" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Oznámení uživatele" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "JSON reprezentace atributů této položky" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Objednané atributy produktu" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Objednávka rodičů" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Konkrétní produkt spojený s touto objednávkou" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Množství tohoto konkrétního produktu v objednávce" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Množství produktu" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Aktuální stav tohoto produktu v objednávce" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Stav produktové řady" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "špatně zadaná akce pro zpětnou vazbu: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "nelze poskytnout zpětnou vazbu na objednávku, která nebyla přijata" - -#: core/models.py:1882 -msgid "download" -msgstr "Stáhnout" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Ke stažení na" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Digitální aktivum pro nedokončenou objednávku nelze stáhnout." - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Zpětná vazba" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Odkazuje na konkrétní produkt v objednávce, kterého se tato zpětná vazba " -"týká." - -#: core/models.py:1930 -msgid "related order product" -msgstr "Související objednávka produktu" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Hodnocení produktu přidělené uživatelem" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Hodnocení produktu" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Zpětná vazba" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"pro přidání zpětné vazby musíte uvést komentář, hodnocení a uuid produktu." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Chyba při vytváření promokódu: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Potvrzení objednávky" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hello %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Děkujeme vám za vaši objednávku #%(order.pk)s! S potěšením Vám oznamujeme, " -"že jsme Vaši objednávku převzali do práce. Níže jsou uvedeny údaje o vaší " -"objednávce:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Celkem" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Celková cena" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"V případě dotazů se obraťte na naši podporu na adrese " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "S pozdravem,
tým %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Všechna práva vyhrazena" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Dodaná objednávka" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Ahoj %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Úspěšně jsme zpracovali vaši objednávku №%(order_uuid)s! Níže jsou uvedeny " -"podrobnosti vaší objednávky:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"další\n" -" informace" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Hodnota" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"V případě dotazů se můžete obrátit na naši podporu na adrese " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "S pozdravem,
tým %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Klíč" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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 " -"jsou uvedeny údaje o vaší objednávce:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Cena přepravy" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Vaše objednávka bude doručena na následující adresu:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "S pozdravem,
tým %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"všechna práva\n" -" vyhrazeno" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Jsou vyžadována data i časový limit" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund." - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} musí být model" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} musí být objekt seznamu" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Kontakt iniciován" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Potvrzení objednávky" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Dodaná objednávka" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "K provedení této akce nemáte oprávnění." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Parametr NOMINATIM_URL musí být nakonfigurován!" - -#: core/validators.py:16 -#, python-brace-format -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ů." - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Nesprávný formát telefonního čísla" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Digitální aktivum můžete stáhnout pouze jednou" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon nebyl nalezen" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Chyba v zeměpisném kódování: {e}" diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo deleted file mode 100644 index 3364a06b..00000000 Binary files a/core/locale/da_DK/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/da_DK/LC_MESSAGES/django.po b/core/locale/da_DK/LC_MESSAGES/django.po deleted file mode 100644 index f969839a..00000000 --- a/core/locale/da_DK/LC_MESSAGES/django.po +++ /dev/null @@ -1,2309 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: da-dk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Unikt ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "Unikt ID bruges til sikkert at identificere ethvert databaseobjekt" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Er aktiv" - -#: core/abstract.py:21 -msgid "" -"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." - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Oprettet" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Da objektet første gang dukkede op i databasen" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modificeret" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Hvornår objektet sidst blev redigeret" - -#: core/admin.py:55 -msgid "translations" -msgstr "Oversættelser" - -#: core/admin.py:59 -msgid "general" -msgstr "Generelt" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relationer" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadata" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Tidsstempler" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Aktivér udvalgte %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s aktiveret med succes!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Deaktiver udvalgte %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s deaktiveret med succes." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Attributværdi" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Attributværdier" - -#: core/admin.py:124 -msgid "image" -msgstr "Billede" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Billeder" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Lager" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Aktier" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Bestil produkt" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Bestil produkter" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Børn" - -#: core/admin.py:471 -msgid "Config" -msgstr "Konfig" - -#: core/apps.py:8 -msgid "core" -msgstr "Kerne" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Færdig" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Leverer" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Leveret" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Annulleret" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Mislykket" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "Afventer" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Accepteret" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Penge returneret" - -#: core/choices.py:17 -msgid "payment" -msgstr "Betaling" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Succesfuld" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Cache-I/O" - -#: core/docs/drf/views.py:19 -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 "" -"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." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Få en liste over understøttede sprog" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Hent applikationens eksponerbare parametre" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Send en besked til supportteamet" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Anmod om en CORSed URL. Kun https er tilladt." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "Globalt søgepunkt til at søge på tværs af projektets tabeller" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Køb en ordre som virksomhed" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Køb en ordre som en virksomhed ved hjælp af de angivne `produkter` med " -"`produkt_uuid` og `attributter`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Liste over alle attributgrupper (simpel visning)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Hent en enkelt attributgruppe (detaljeret visning)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Opret en attributgruppe" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Slet en attributgruppe" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Omskriv en eksisterende attributgruppe, der gemmer ikke-redigerbare " -"attributter" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Liste over alle attributter (simpel visning)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Hent en enkelt attribut (detaljeret visning)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Opret en attribut" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Slet en attribut" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare " -"felter" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Liste over alle attributværdier (simpel visning)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Hent en enkelt attributværdi (detaljeret visning)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Opret en attributværdi" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Slet en attributværdi" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Omskriv en eksisterende attributværdi, der gemmer ikke-redigerbare filer" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Liste over alle kategorier (enkel visning)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Hent en enkelt kategori (detaljeret visning)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Opret en kategori" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Slet en kategori" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " -"felter" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Liste over alle kategorier (enkel visning)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "For ikke-ansatte brugere er det kun deres egne ordrer, der returneres." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtrer ordrer med buy_time >= denne ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtrer ordrer med buy_time <= denne ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtrer efter nøjagtig ordre-UUID" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtrer efter nøjagtigt menneskeligt læsbart ordre-ID" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "Filtrer efter brugerens e-mail (case-insensitive exact match)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrer efter brugerens UUID" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "Filtrer efter ordrestatus (case-insensitive substring match)" - -#: core/docs/drf/viewsets.py:201 -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')." -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')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Hent en enkelt kategori (detaljeret visning)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Opret en attribut" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Virker ikke for ikke-ansatte brugere." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Slet en attribut" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " -"felter" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Købspris på bestillingstidspunktet" - -#: core/docs/drf/viewsets.py:233 -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 "" -"Afslutter købet af ordren. Hvis `force_balance` bruges, gennemføres købet " -"ved hjælp af brugerens saldo; hvis `force_payment` bruges, igangsættes en " -"transaktion." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "Køb en ordre uden at oprette en konto" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "afslutter ordrekøbet for en ikke-registreret bruger." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Tilføj et produkt til ordren" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Tilføjer et produkt til en ordre ved hjælp af de angivne `product_uuid` og " -"`attributes`." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Tilføj en liste med produkter til bestilling, antal tæller ikke med" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Tilføjer en liste af produkter til en ordre ved hjælp af de angivne " -"`product_uuid` og `attributes`." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Fjern et produkt fra ordren" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Fjerner et produkt fra en ordre ved hjælp af de angivne `product_uuid` og " -"`attributes`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Fjern et produkt fra ordren, mængderne tæller ikke med" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Fjerner en liste af produkter fra en ordre ved hjælp af de angivne " -"`product_uuid` og `attributes`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Liste over alle attributter (simpel visning)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"For ikke-ansatte brugere er det kun deres egne ønskelister, der returneres." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Hent en enkelt attribut (detaljeret visning)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Opret en attribut" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Virker ikke for ikke-ansatte brugere." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Slet en attribut" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare " -"felter" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Tilføj et produkt til ordren" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Tilføjer et produkt til en ønskeliste ved hjælp af den angivne " -"`product_uuid`." - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Fjern et produkt fra ønskelisten" - -#: core/docs/drf/viewsets.py:314 -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`." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Tilføj mange produkter til ønskelisten" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Tilføjer mange produkter til en ønskeliste ved hjælp af de angivne " -"`product_uuids`." - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Fjern et produkt fra ordren" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Fjerner mange produkter fra en ønskeliste ved hjælp af de angivne " -"`product_uuids`." - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Eksempler på dette: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`." - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Liste over alle produkter (enkel visning)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(præcis) Produkt-UUID" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Produktnavn" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(liste) Kategorinavne, skelner ikke mellem store og små bogstaver" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(præcis) UUID for kategori" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(liste) Tag-navne, skelner ikke mellem store og små bogstaver" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum aktiekurs" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maksimal aktiekurs" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(præcis) Kun aktive produkter" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Mærkenavn" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimum lagermængde" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(præcis) Digital vs. fysisk" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Tilladt:** uuid, vurdering, navn, slug, oprettet, ændret, pris, tilfældig" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Hent et enkelt produkt (detaljeret visning)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "Produkt UUID eller Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Opret et produkt" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Omskriv et eksisterende produkt og bevar ikke-redigerbare felter" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Opdater nogle felter i et eksisterende produkt og bevar ikke-redigerbare " -"felter" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Slet et produkt" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "viser alle tilladte tilbagemeldinger for et produkt" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Angiv alle adresser" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Hent en enkelt adresse" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Opret en ny adresse" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Slet en adresse" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Opdater en hel adresse" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Delvis opdatering af en adresse" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Automatisk udfyldning af adresseinput" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "Rå dataforespørgselsstreng, tilføj venligst data fra geo-IP-slutpunkt" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "begrænser mængden af resultater, 1 < grænse < 10, standard: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "Vis alle tilbagemeldinger (enkel visning)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "Hent en enkelt feedback (detaljeret visning)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "skab en feedback" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "Slet en tilbagemelding" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "omskriv en eksisterende feedback, der gemmer ikke-redigerbare filer" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " -"felter" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "liste alle ordre-produkt-relationer (simpel visning)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "Hent en enkelt ordre-produkt-relation (detaljeret visning)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "Opret en ny ordre-produkt-relation" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "erstatte en eksisterende ordre-produkt-relation" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "delvist opdatere en eksisterende ordre-produkt-relation" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "slette en ordre-produkt-relation" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Der er ikke angivet noget søgeord." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Navn" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Kategorier" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Kategorier Snegle" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tags" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Min. pris" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Maks. pris" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Er aktiv" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Brand" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Egenskaber" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Mængde" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Snegl" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Er digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Inkluder underkategorier" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Der skal være en category_uuid for at bruge include_subcategories-flaget" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Søg (ID, produktnavn eller reservedelsnummer)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Købt efter (inklusive)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Købt før (inklusive)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "Brugerens e-mail" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "Bruger UUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "Status" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Menneskeligt læsbart ID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Forælder" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Hele kategorien (har mindst 1 produkt eller ej)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Niveau" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "Produkt UUID" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Nøgle til at lede efter i eller lægge i cachen" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Data, der skal gemmes i cachen" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Timeout i sekunder for at lægge data i cachen" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Cachelagrede data" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Cameliserede JSON-data fra den ønskede URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Kun URL'er, der starter med http(s)://, er tilladt." - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Tilføj et produkt til ordren" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Ordre {order_uuid} ikke fundet" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Fjern et produkt fra ordren" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Fjern alle produkter fra ordren" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Køb en ordre" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Udfør en handling på en liste af produkter i ordren" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Fjern/tilføj" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Handlingen skal være enten \"tilføj\" eller \"fjern\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Tilføj et produkt til ordren" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Ønskeliste {wishlist_uuid} ikke fundet" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Fjern et produkt fra ordren" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Fjern et produkt fra ordren" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Fjern et produkt fra ordren" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Køb en ordre" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Original adressestreng leveret af brugeren" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} findes ikke: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Grænsen skal være mellem 1 og 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - fungerer som en charme" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Egenskaber" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Grupperede attributter" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Grupper af attributter" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Kategorier" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Mærker" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Kategorier" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Markup-procentdel" - -#: core/graphene/object_types.py:129 -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." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tags for denne kategori" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Produkter i denne kategori" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Leverandører" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Breddegrad (Y-koordinat)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Længdegrad (X-koordinat)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Sådan gør du" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Repræsenterer feedback fra en bruger." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Meddelelser" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Download url for dette ordreprodukt, hvis det er relevant" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "En liste over bestillingsprodukter i denne ordre" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Faktureringsadresse" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Leveringsadresse for denne ordre, lad den være tom, hvis den er den samme " -"som faktureringsadressen, eller hvis den ikke er relevant" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Samlet pris for denne ordre" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Samlet antal produkter i ordren" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Er alle produkterne i ordren digitale?" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Bestillinger" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Billed-URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Produktets billeder" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Kategori" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Tilbagemeldinger" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Brand" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Attributgrupper" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Pris" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Mængde" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Antal tilbagemeldinger" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Produkter" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Promokoder" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Produkter til salg" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Kampagner" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Leverandør" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Produkt" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Produkter på ønskelisten" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Ønskelister" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Mærkede produkter" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Produktmærker" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Tagged kategorier" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Kategoriernes tags" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Projektets navn" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Virksomhedens e-mail" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Virksomhedens navn" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Virksomhedens adresse" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Virksomhedens telefonnummer" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "E-mail-værtsbruger" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Maksimalt beløb til betaling" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Minimumsbeløb for betaling" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Analytiske data" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Data om reklamer" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Konfiguration" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Sprogkode" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Sprogets navn" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Sprogflag, hvis det findes :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Få en liste over understøttede sprog" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Søgeresultater for produkter" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Søgeresultater for produkter" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Forælder til denne gruppe" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Overordnet attributgruppe" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Attributgruppens navn" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Attributgruppe" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for " -"leverandørens API-kommunikation" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Oplysninger om godkendelse" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Definer markeringen for produkter, der hentes fra denne leverandør" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Sælgerens markup-procentdel" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Navn på denne leverandør" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Leverandørens navn" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Intern tag-identifikator for produkttagget" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Tag-navn" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Brugervenligt navn til produktmærket" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Navn på tag-visning" - -#: core/models.py:213 -msgid "product tag" -msgstr "Produktmærke" - -#: core/models.py:251 -msgid "category tag" -msgstr "Kategori-tag" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "Kategori-tags" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Upload et billede, der repræsenterer denne kategori" - -#: core/models.py:332 -msgid "category image" -msgstr "Kategori billede" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Definer en markup-procentdel for produkter i denne kategori" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Forælder til denne kategori for at danne en hierarkisk struktur" - -#: core/models.py:347 -msgid "parent category" -msgstr "Overordnet kategori" - -#: core/models.py:352 -msgid "category name" -msgstr "Navn på kategori" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Giv et navn til denne kategori" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Tilføj en detaljeret beskrivelse af denne kategori" - -#: core/models.py:361 -msgid "category description" -msgstr "Beskrivelse af kategori" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Prioritet" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Navnet på dette mærke" - -#: core/models.py:430 -msgid "brand name" -msgstr "Varemærke" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Upload et logo, der repræsenterer dette brand" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Brandets lille image" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Upload et stort logo, der repræsenterer dette brand" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Brandets store image" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Tilføj en detaljeret beskrivelse af brandet" - -#: core/models.py:453 -msgid "brand description" -msgstr "Varemærkebeskrivelse" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Valgfrie kategorier, som dette brand er forbundet med" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Kategorier" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Kategori, som dette produkt tilhører" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Tilknyt eventuelt dette produkt til et brand" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Angiver, om dette produkt leveres digitalt" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Er produktet digitalt?" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Giv produktet et klart identificerende navn" - -#: core/models.py:556 -msgid "product name" -msgstr "Produktets navn" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Tilføj en detaljeret beskrivelse af produktet" - -#: core/models.py:562 -msgid "product description" -msgstr "Produktbeskrivelse" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Reservedelsnummer for dette produkt" - -#: core/models.py:570 -msgid "part number" -msgstr "Varenummer" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Kategori for denne attribut" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Gruppe af denne attribut" - -#: core/models.py:690 -msgid "string" -msgstr "Streng" - -#: core/models.py:691 -msgid "integer" -msgstr "Heltal" - -#: core/models.py:692 -msgid "float" -msgstr "Flyder" - -#: core/models.py:693 -msgid "boolean" -msgstr "Boolsk" - -#: core/models.py:694 -msgid "array" -msgstr "Array" - -#: core/models.py:695 -msgid "object" -msgstr "Objekt" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Type af attributtens værdi" - -#: core/models.py:698 -msgid "value type" -msgstr "Værditype" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Navn på denne attribut" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Attributtens navn" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Attribut" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Attribut for denne værdi" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Det specifikke produkt, der er knyttet til denne attributs værdi" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Tilknyttet produkt" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "Den specifikke værdi for denne attribut" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Billedets alt-tekst" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Upload billedfilen til dette produkt" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Produktbillede" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Bestemmer den rækkefølge, billederne vises i" - -#: core/models.py:806 -msgid "display priority" -msgstr "Skærm-prioritet" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Det produkt, som dette billede repræsenterer" - -#: core/models.py:825 -msgid "product images" -msgstr "Produktbilleder" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Procentvis rabat for de valgte produkter" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Rabatprocent" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Giv et unikt navn til denne kampagne" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Navn på kampagne" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Beskrivelse af kampagnen" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" - -#: core/models.py:885 -msgid "included products" -msgstr "Inkluderede produkter" - -#: core/models.py:889 -msgid "promotion" -msgstr "Forfremmelse" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Den leverandør, der leverer dette produkt, lagerfører" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Tilknyttet leverandør" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Endelig pris til kunden efter tillæg" - -#: core/models.py:930 -msgid "selling price" -msgstr "Salgspris" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Det produkt, der er knyttet til denne lagerpost" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Den pris, der er betalt til sælgeren for dette produkt" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Leverandørens købspris" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Tilgængelig mængde af produktet på lager" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Antal på lager" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "Leverandørtildelt SKU til identifikation af produktet" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "Leverandørens SKU" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Digital fil knyttet til dette lager, hvis relevant" - -#: core/models.py:961 -msgid "digital file" -msgstr "Digital fil" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Lagerposteringer" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Produkter, som brugeren har markeret som ønskede" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Bruger, der ejer denne ønskeliste" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Ønskelistens ejer" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Ønskeliste" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} findes ikke: {product_uuid}." - -#: core/models.py:1071 -msgid "documentary" -msgstr "Dokumentarfilm" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Dokumentarfilm" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Uafklaret" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Adresselinje til kunden" - -#: core/models.py:1129 -msgid "address line" -msgstr "Adresselinje" - -#: core/models.py:1131 -msgid "street" -msgstr "Gade" - -#: core/models.py:1132 -msgid "district" -msgstr "Distrikt" - -#: core/models.py:1133 -msgid "city" -msgstr "By" - -#: core/models.py:1134 -msgid "region" -msgstr "Region" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Postnummer" - -#: core/models.py:1136 -msgid "country" -msgstr "Land" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Gemt JSON-svar fra geokodningstjenesten" - -#: core/models.py:1159 -msgid "address" -msgstr "Adresse" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adresser" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Unik kode, der bruges af en bruger til at indløse en rabat" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Identifikator for kampagnekode" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Fast rabatbeløb" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Procentvis rabat" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Tidsstempel, når promokoden udløber" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Slut gyldighedstid" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Tidsstempel, hvorfra denne promokode er gyldig" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Start gyldighedstid" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Tidsstempel, hvor promokoden blev brugt, blank, hvis den ikke er brugt endnu" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Tidsstempel for brug" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Bruger tildelt denne promokode, hvis relevant" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Tildelt bruger" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Kampagnekode" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Kampagnekoder" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " -"eller ingen af dem." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Promokoden er allerede blevet brugt" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Ugyldig rabattype for promokode {self.uuid}." - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "Den faktureringsadresse, der bruges til denne ordre" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Valgfri kampagnekode anvendt på denne ordre" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Anvendt kampagnekode" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "Den leveringsadresse, der er brugt til denne ordre" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Leveringsadresse" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Ordrens aktuelle status i dens livscyklus" - -#: core/models.py:1349 -msgid "order status" -msgstr "Bestillingsstatus" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges " -"tabelvisningen" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "JSON-repræsentation af ordreattributter for denne ordre" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "Den bruger, der har afgivet ordren" - -#: core/models.py:1367 -msgid "user" -msgstr "Bruger" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Køb tid" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "En menneskeligt læsbar identifikator for ordren" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "menneskeligt læsbart ID" - -#: core/models.py:1388 -msgid "order" -msgstr "Bestil" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "En bruger må kun have én afventende ordre ad gangen!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "Du kan ikke tilføje produkter til en ordre, der ikke er i gang." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Du kan ikke tilføje inaktive produkter til en ordre" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "Du kan ikke tilføje flere produkter, end der er på lager" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" -"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende ordre." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} findes ikke med forespørgsel <{query}>." - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Promokode findes ikke" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "Du kan kun købe fysiske produkter med angivet leveringsadresse!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Adressen findes ikke" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "Du kan ikke købe i øjeblikket, prøv venligst igen om et par minutter." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Ugyldig kraftværdi" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Du kan ikke købe en tom ordre!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Utilstrækkelige midler til at gennemføre ordren" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " -"kundens navn, kundens e-mail, kundens telefonnummer" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "Den pris, som kunden har betalt for dette produkt på købstidspunktet" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Købspris på bestillingstidspunktet" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Interne kommentarer til administratorer om dette bestilte produkt" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Interne kommentarer" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Notifikationer til brugere" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "JSON-repræsentation af dette elements attributter" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Bestilte produktattributter" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Forældreordre" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Mængde af dette specifikke produkt i ordren" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Produktmængde" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Aktuel status for dette produkt i bestillingen" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Status for produktlinje" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "forkert handling angivet for feedback: {action}." - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" -"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende ordre." - -#: core/models.py:1882 -msgid "download" -msgstr "Download" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Downloads" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Du kan ikke downloade et digitalt aktiv for en ikke-færdiggjort ordre" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Brugernes kommentarer om deres oplevelse med produktet" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Kommentarer til feedback" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Henviser til det specifikke produkt i en ordre, som denne feedback handler om" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Relateret ordreprodukt" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Brugertildelt vurdering af produktet" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Produktvurdering" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Feedback" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"Du skal angive en kommentar, en vurdering og et produkt-uid for at tilføje " -"feedback." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Fejl under oprettelse af promokode: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Ordrebekræftelse" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hej %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Tak for din ordre #%(order.pk)s! Vi er glade for at kunne informere dig om, " -"at vi har taget din ordre i brug. Nedenfor er detaljerne om din ordre:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "I alt" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Samlet pris" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Hvis du har spørgsmål, er du velkommen til at kontakte vores support på " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Med venlig hilsen,
%(config.PROJECT_NAME)s team" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Alle rettigheder forbeholdes" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Order Delivered" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Hej %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Vi har behandlet din ordre №%(order_uuid)s! Nedenfor er detaljerne om din " -"ordre:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"yderligere\n" -" oplysninger" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Værdi" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"Hvis du har spørgsmål, er du velkommen til at kontakte vores support på " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Med venlig hilsen,
%(project_name)s team" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Nøgle" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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 " -"er detaljerne om din ordre:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Forsendelsespris" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Din ordre vil blive leveret til følgende adresse:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Med venlig hilsen %(config.PROJECT_NAME)s team" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"alle rettigheder\n" -" forbeholdt" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Både data og timeout er påkrævet" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} skal være model" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} skal være et listeobjekt" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Kontakt os indledt" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Ordrebekræftelse" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Ordre leveret" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "Du har ikke tilladelse til at udføre denne handling." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Parameteren NOMINATIM_URL skal være konfigureret!" - -#: core/validators.py:16 -#, 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." - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Ugyldigt telefonnummerformat" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Du kan kun downloade det digitale aktiv én gang" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "Favicon ikke fundet" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Fejl i geokodning: {e}" diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo deleted file mode 100644 index 394ab449..00000000 Binary files a/core/locale/de_DE/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/de_DE/LC_MESSAGES/django.po b/core/locale/de_DE/LC_MESSAGES/django.po deleted file mode 100644 index cfaadc1b..00000000 --- a/core/locale/de_DE/LC_MESSAGES/django.po +++ /dev/null @@ -1,2365 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: de-de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Eindeutige ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"Eindeutige ID wird zur sicheren Identifizierung jedes Datenbankobjekts " -"verwendet" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Ist aktiv" - -#: core/abstract.py:21 -msgid "" -"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." - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Erstellt" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Wann das Objekt zum ersten Mal in der Datenbank erschienen ist" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Geändert" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Wann das Objekt zuletzt bearbeitet wurde" - -#: core/admin.py:55 -msgid "translations" -msgstr "Übersetzungen" - -#: core/admin.py:59 -msgid "general" -msgstr "Allgemein" - -#: core/admin.py:61 -msgid "relations" -msgstr "Beziehungen" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadaten" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Zeitstempel" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Ausgewählte %(verbose_name_plural)s aktivieren" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s erfolgreich aktiviert!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s wurde erfolgreich deaktiviert." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Attribut Wert" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Attribut Werte" - -#: core/admin.py:124 -msgid "image" -msgstr "Bild" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Bilder" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Lagerbestand" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Bestände" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Produkt bestellen" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Produkte bestellen" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Kinder" - -#: core/admin.py:471 -msgid "Config" -msgstr "Konfigurieren Sie" - -#: core/apps.py:8 -msgid "core" -msgstr "Kern" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Fertige" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Bereitstellung von" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Geliefert" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Abgesagt" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Gescheitert" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "Anhängig" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Angenommen" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Zurückgegebenes Geld" - -#: core/choices.py:17 -msgid "payment" -msgstr "Zahlung" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momente" - -#: core/choices.py:24 -msgid "successful" -msgstr "Erfolgreich" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Cache I/O" - -#: core/docs/drf/views.py:19 -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." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Eine Liste der unterstützten Sprachen abrufen" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Abrufen der exponierbaren Parameter der Anwendung" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Senden Sie eine Nachricht an das Support-Team" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Fordern Sie eine CORS-gesicherte URL an. Nur https erlaubt." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "Globaler Suchendpunkt zur Abfrage aller Tabellen des Projekts" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Eine Bestellung als Unternehmen kaufen" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Kauf einer Bestellung als Unternehmen unter Verwendung der angegebenen " -"\"Produkte\" mit \"product_uuid\" und \"Attributen\"." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Alle Attributgruppen auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Abrufen einer einzelnen Attributgruppe (Detailansicht)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Erstellen einer Attributgruppe" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Löschen einer Attributgruppe" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Umschreiben einer bestehenden Attributgruppe mit Speicherung von Nicht-" -"Editierbarkeit" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Alle Attribute auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Ein Attribut erstellen" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Ein Attribut löschen" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "" -"Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten " -"gespeichert werden" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare " -"Daten zu speichern" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Alle Attributwerte auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Abrufen eines einzelnen Attributwertes (Detailansicht)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Einen Attributwert erstellen" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Löschen eines Attributwertes" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Umschreiben eines vorhandenen Attributwerts mit Speicherung von Nicht-" -"Editierbarkeit" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Alle Kategorien auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Eine Kategorie erstellen" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Eine Kategorie löschen" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "" -"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Alle Kategorien auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Bei Nicht-Mitarbeitern werden nur die eigenen Bestellungen zurückgeschickt." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Aufträge mit Kaufzeitpunkt >= dieser ISO 8601-Datumszeit filtern" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Aufträge mit Kaufzeitpunkt <= dieser ISO 8601-Datumszeit filtern" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filter nach exakter UUID der Bestellung" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtern nach exakter, von Menschen lesbarer Bestell-ID" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filter nach der E-Mail des Benutzers (Groß-/Kleinschreibung nicht " -"berücksichtigend, exakte Übereinstimmung)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filter nach der UUID des Benutzers" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Filter nach Bestellstatus (Groß-/Kleinschreibung nicht berücksichtigende " -"Teilstring-Übereinstimmung)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"Sortierung nach einem von: uuid, human_readable_id, user_email, user, " -"status, created, modified, buy_time, random. Präfix mit '-' für absteigend " -"(z. B. '-buy_time')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Ein Attribut erstellen" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Ein Attribut löschen" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "" -"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" - -#: core/docs/drf/viewsets.py:233 -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 "" -"Schließt den Kauf der Bestellung ab. Bei Verwendung von \"force_balance\" " -"wird der Kauf mit dem Guthaben des Benutzers abgeschlossen; bei Verwendung " -"von \"force_payment\" wird eine Transaktion ausgelöst." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "eine Bestellung kaufen, ohne ein Konto anzulegen" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "" -"schließt den Kauf einer Bestellung für einen nicht registrierten Benutzer ab." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Ein Produkt zur Bestellung hinzufügen" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Fügt ein Produkt unter Verwendung der angegebenen `product_uuid` und " -"`attributes` zu einer Bestellung hinzu." - -#: core/docs/drf/viewsets.py:260 -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" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Fügt einer Bestellung eine Liste von Produkten unter Verwendung der " -"angegebenen `product_uuid` und `attributes` hinzu." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Ein Produkt aus der Bestellung entfernen" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Entfernt ein Produkt aus einer Bestellung unter Verwendung der angegebenen " -"`product_uuid` und `attributes`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "" -"Ein Produkt aus der Bestellung entfernen, die Mengen werden nicht gezählt" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Entfernt eine Liste von Produkten aus einer Bestellung unter Verwendung der " -"angegebenen `product_uuid` und `attributes`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Alle Attribute auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Bei Nicht-Mitarbeitern werden nur ihre eigenen Wunschlisten zurückgegeben." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Ein Attribut erstellen" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Ein Attribut löschen" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "" -"Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten " -"gespeichert werden" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare " -"Daten zu speichern" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Ein Produkt zur Bestellung hinzufügen" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Fügt ein Produkt mit der angegebenen `product_uuid` zu einer Wunschliste " -"hinzu" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Ein Produkt von der Wunschliste entfernen" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Entfernt ein Produkt aus einer Wunschliste unter Verwendung der angegebenen " -"`product_uuid`." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Viele Produkte auf den Wunschzettel setzen" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Fügt einer Wunschliste viele Produkte unter Verwendung der angegebenen " -"`product_uuids` hinzu" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Ein Produkt aus der Bestellung entfernen" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Entfernt viele Produkte aus einer Wunschliste unter Verwendung der " -"angegebenen `product_uuids`." - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Beispiele: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Alle Produkte auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(genaue) Produkt-UUID" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Produktname" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(Liste) Kategorienamen, Groß- und Kleinschreibung wird nicht berücksichtigt" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(genau) Kategorie UUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(Liste) Tag-Namen, Groß- und Kleinschreibung wird nicht berücksichtigt" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Mindestaktienkurs" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximaler Aktienkurs" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(genau) Nur aktive Produkte" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Markenname" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Mindestlagermenge" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(genau) Digital vs. physisch" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Erlaubt:** uuid, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Ein einzelnes Produkt abrufen (Detailansicht)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "Produkt UUID oder Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Ein Produkt erstellen" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "" -"Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer " -"Felder" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Einige Felder eines bestehenden Produkts aktualisieren, nicht editierbare " -"Felder beibehalten" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Ein Produkt löschen" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "listet alle zulässigen Rückmeldungen für ein Produkt auf" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Alle Adressen auflisten" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Eine einzelne Adresse abrufen" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Eine neue Adresse erstellen" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Eine Adresse löschen" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Eine ganze Adresse aktualisieren" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Teilweise Aktualisierung einer Adresse" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Autovervollständigung der Adresseingabe" - -#: core/docs/drf/viewsets.py:576 -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" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "begrenzt die Anzahl der Ergebnisse, 1 < Limit < 10, Standard: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "alle Rückmeldungen auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "eine einzelne Rückmeldung abrufen (detaillierte Ansicht)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "ein Feedback erstellen" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "eine Rückmeldung löschen" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" -"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare " -"Daten zu speichern" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "alle Bestell-Produkt-Beziehungen auflisten (einfache Ansicht)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "eine einzelne Auftrag-Produkt-Relation abrufen (Detailansicht)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "eine neue Auftrag-Produkt-Beziehung erstellen" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "eine bestehende Auftrag-Produkt-Relation ersetzen" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "eine bestehende Auftrag-Produkt-Beziehung teilweise aktualisieren" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "eine Auftrag-Produkt-Beziehung löschen" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "" -"Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Kein Suchbegriff angegeben." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Name" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Kategorien" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Kategorien Schnecken" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tags" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Mindestpreis" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Maximaler Preis" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Ist aktiv" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Marke" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Attribute" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Menge" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Schnecke" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Is Digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Unterkategorien einbeziehen" - -#: core/filters.py:147 -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" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Suche (ID, Produktname oder Teilenummer)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Gekauft nach (einschließlich)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Gekauft vor (einschließlich)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "Benutzer-E-Mail" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "User UUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "Status" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Human Readable ID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Elternteil" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Ebene" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "Produkt UUID" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Schlüssel, der im Cache zu suchen oder in den Cache zu legen ist" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Im Cache zu speichernde Daten" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Timeout in Sekunden, um die Daten in den Cache zu stellen" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Zwischengespeicherte Daten" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Camelized JSON-Daten aus der angeforderten URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Ein Produkt zur Bestellung hinzufügen" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Bestellung {order_uuid} nicht gefunden" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Ein Produkt aus der Bestellung entfernen" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Alle Produkte aus der Bestellung entfernen" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Eine Bestellung kaufen" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -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!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" - -#: core/graphene/mutations.py:233 -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" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Entfernen/Hinzufügen" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Aktion muss entweder \"Hinzufügen\" oder \"Entfernen\" sein!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Ein Produkt zur Bestellung hinzufügen" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Wunschzettel {wishlist_uuid} nicht gefunden" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Ein Produkt aus der Bestellung entfernen" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Ein Produkt aus der Bestellung entfernen" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Ein Produkt aus der Bestellung entfernen" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Eine Bestellung kaufen" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Vom Benutzer angegebene Originaladresse" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} existiert nicht: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Der Grenzwert muss zwischen 1 und 10 liegen." - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - funktioniert wie ein Zauber" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Attribute" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Gruppierte Attribute" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Gruppen von Attributen" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Kategorien" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Marken" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Kategorien" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Markup Percentage" - -#: core/graphene/object_types.py:129 -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." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tags für diese Kategorie" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Produkte in dieser Kategorie" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Anbieter" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Breitengrad (Y-Koordinate)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Längengrad (X-Koordinate)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Wie" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Stellt das Feedback eines Benutzers dar." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Benachrichtigungen" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Rechnungsadresse" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Lieferadresse für diese Bestellung, leer lassen, wenn sie mit der " -"Rechnungsadresse übereinstimmt oder nicht zutrifft" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Gesamtpreis für diese Bestellung" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Gesamtmenge der bestellten Produkte" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Sind alle Produkte in der Bestellung digital" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Bestellungen" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Bild URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Bilder des Produkts" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Kategorie" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Rückmeldungen" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Marke" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Attribut-Gruppen" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Preis" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Menge" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Anzahl der Rückmeldungen" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Produkte" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Promocodes" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Zum Verkauf stehende Produkte" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Werbeaktionen" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Anbieter" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Produkt" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Auf dem Wunschzettel stehende Produkte" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Wunschzettel" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Markierte Produkte" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Produkt-Tags" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Markierte Kategorien" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Kategorien'-Tags" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Name des Projekts" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Unternehmen E-Mail" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Name des Unternehmens" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Adresse des Unternehmens" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Telefonnummer des Unternehmens" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "E-Mail-Host-Benutzer" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Höchstbetrag für die Zahlung" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Mindestbetrag für die Zahlung" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Analytische Daten" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Advertisement data" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Konfiguration" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Sprachcode" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Name der Sprache" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Sprachflagge, falls vorhanden :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Eine Liste der unterstützten Sprachen abrufen" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Suchergebnisse für Produkte" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Suchergebnisse für Produkte" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Elternteil dieser Gruppe" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Übergeordnete Attributgruppe" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Name der Attributgruppe" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Attribut-Gruppe" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation " -"des Anbieters erforderlich sind" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Informationen zur Authentifizierung" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "" -"Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten " -"bezogen werden" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Prozentualer Aufschlag des Lieferanten" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Name dieses Anbieters" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Name des Anbieters" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Interner Tag-Identifikator für das Produkt-Tag" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Tag name" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Benutzerfreundlicher Name für den Produktanhänger" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Tag-Anzeigename" - -#: core/models.py:213 -msgid "product tag" -msgstr "Produkt-Tag" - -#: core/models.py:251 -msgid "category tag" -msgstr "Kategorie-Tag" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "Kategorie-Tags" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert" - -#: core/models.py:332 -msgid "category image" -msgstr "Kategorie Bild" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "" -"Definieren Sie einen prozentualen Aufschlag für Produkte in dieser Kategorie" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "" -"Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden" - -#: core/models.py:347 -msgid "parent category" -msgstr "Übergeordnete Kategorie" - -#: core/models.py:352 -msgid "category name" -msgstr "Name der Kategorie" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Geben Sie einen Namen für diese Kategorie an" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" - -#: core/models.py:361 -msgid "category description" -msgstr "Beschreibung der Kategorie" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Priorität" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Name dieser Marke" - -#: core/models.py:430 -msgid "brand name" -msgstr "Markenname" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Marke kleines Bild" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Großes Image der Marke" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" - -#: core/models.py:453 -msgid "brand description" -msgstr "Beschreibung der Marke" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "" -"Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Kategorien" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Kategorie, zu der dieses Produkt gehört" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Gibt an, ob dieses Produkt digital geliefert wird" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Ist das Produkt digital" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." - -#: core/models.py:556 -msgid "product name" -msgstr "Name des Produkts" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" - -#: core/models.py:562 -msgid "product description" -msgstr "Beschreibung des Produkts" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Teilenummer für dieses Produkt" - -#: core/models.py:570 -msgid "part number" -msgstr "Teilnummer" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Kategorie dieses Attributs" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Gruppe dieses Attributs" - -#: core/models.py:690 -msgid "string" -msgstr "Zeichenfolge" - -#: core/models.py:691 -msgid "integer" -msgstr "Integer" - -#: core/models.py:692 -msgid "float" -msgstr "Schwimmer" - -#: core/models.py:693 -msgid "boolean" -msgstr "Boolesche" - -#: core/models.py:694 -msgid "array" -msgstr "Array" - -#: core/models.py:695 -msgid "object" -msgstr "Objekt" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Typ des Attributwerts" - -#: core/models.py:698 -msgid "value type" -msgstr "Werttyp" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Name dieses Attributs" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Name des Attributs" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Attribut" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Attribut dieses Wertes" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "" -"Das spezifische Produkt, das mit dem Wert dieses Attributs verbunden ist" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Zugehöriges Produkt" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "Der spezifische Wert für dieses Attribut" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "" -"Geben Sie einen alternativen Text für das Bild an, um die Barrierefreiheit " -"zu gewährleisten." - -#: core/models.py:795 -msgid "image alt text" -msgstr "Bild-Alt-Text" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Produktbild" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" - -#: core/models.py:806 -msgid "display priority" -msgstr "Priorität anzeigen" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Das Produkt, das dieses Bild darstellt" - -#: core/models.py:825 -msgid "product images" -msgstr "Produktbilder" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Prozentualer Rabatt für die ausgewählten Produkte" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Prozentsatz der Ermäßigung" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Name der Aktion" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Promotion description" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" - -#: core/models.py:885 -msgid "included products" -msgstr "Enthaltene Produkte" - -#: core/models.py:889 -msgid "promotion" -msgstr "Förderung" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Zugehöriger Anbieter" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Endpreis für den Kunden nach Aufschlägen" - -#: core/models.py:930 -msgid "selling price" -msgstr "Verkaufspreis" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Das mit diesem Bestandseintrag verbundene Produkt" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Der an den Verkäufer gezahlte Preis für dieses Produkt" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Einkaufspreis des Verkäufers" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Verfügbare Menge des Produkts auf Lager" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Vorrätige Menge" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU des Verkäufers" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" - -#: core/models.py:961 -msgid "digital file" -msgstr "Digitale Datei" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Bestandseinträge" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Produkte, die der Benutzer als gewünscht markiert hat" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Benutzer, dem diese Wunschliste gehört" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Besitzer der Wishlist" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Wunschzettel" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} existiert nicht: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Dokumentarfilm" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Dokumentarfilme" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Ungelöst" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Adresszeile für den Kunden" - -#: core/models.py:1129 -msgid "address line" -msgstr "Adresszeile" - -#: core/models.py:1131 -msgid "street" -msgstr "Straße" - -#: core/models.py:1132 -msgid "district" -msgstr "Bezirk" - -#: core/models.py:1133 -msgid "city" -msgstr "Stadt" - -#: core/models.py:1134 -msgid "region" -msgstr "Region" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Postleitzahl" - -#: core/models.py:1136 -msgid "country" -msgstr "Land" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolocation Point(Längengrad, Breitengrad)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" - -#: core/models.py:1159 -msgid "address" -msgstr "Adresse" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adressen" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "" -"Einzigartiger Code, den ein Nutzer zum Einlösen eines Rabatts verwendet" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Kennung des Promo-Codes" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "" -"Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet wird" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Fester Rabattbetrag" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Prozentualer Rabatt" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Zeitstempel, wann der Promocode abläuft" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Ende der Gültigkeitsdauer" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Beginn der Gültigkeitsdauer" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Zeitstempel, wann der Promocode verwendet wurde, leer, wenn noch nicht " -"verwendet" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Zeitstempel der Verwendung" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Zugewiesener Benutzer" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Promo-Code" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Promo-Codes" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " -"Prozentsatz), aber nicht beides oder keines von beiden." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Promocode wurde bereits verwendet" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Ungültiger Rabatttyp für Promocode {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "Die für diese Bestellung verwendete Rechnungsadresse" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Optionaler Promo-Code für diese Bestellung" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Angewandter Promo-Code" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "Die für diese Bestellung verwendete Lieferadresse" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Lieferadresse" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" - -#: core/models.py:1349 -msgid "order status" -msgstr "Status der Bestellung" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"JSON-Struktur der Benachrichtigungen, die den Benutzern angezeigt werden " -"sollen; in der Admin-UI wird die Tabellenansicht verwendet" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "Der Benutzer, der die Bestellung aufgegeben hat" - -#: core/models.py:1367 -msgid "user" -msgstr "Benutzer" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Zeit kaufen" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "menschenlesbare ID" - -#: core/models.py:1388 -msgid "order" -msgstr "Bestellung" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Ein Benutzer darf immer nur einen schwebenden Auftrag haben!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "" -"Sie können keine Produkte zu einem Auftrag hinzufügen, der nicht in " -"Bearbeitung ist." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "Sie können nicht mehr Produkte hinzufügen, als auf Lager sind" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" -"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " -"Bearbeitung ist." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} existiert nicht mit Abfrage <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Promocode existiert nicht" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" -"Sie können nur physische Produkte mit angegebener Lieferadresse kaufen!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Adresse ist nicht vorhanden" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"Sie können im Moment nicht kaufen, bitte versuchen Sie es in ein paar " -"Minuten erneut." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Ungültiger Force-Wert" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Sie können keine leere Bestellung kaufen!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Unzureichende Mittel für die Ausführung des Auftrags" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " -"Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Ungültige Zahlungsmethode: {payment_method} von {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "" -"Der Preis, den der Kunde zum Zeitpunkt des Kaufs für dieses Produkt bezahlt " -"hat" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Interne Kommentare" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Benutzerbenachrichtigungen" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "JSON-Darstellung der Attribute dieses Artikels" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Bestellte Produktattribute" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Übergeordneter Auftrag" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Menge dieses spezifischen Produkts in der Bestellung" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Produktmenge" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Aktueller Status dieses Produkts im Auftrag" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Status der Produktlinie" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "falsche Aktion für die Rückmeldung angegeben: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" -"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " -"Bearbeitung ist." - -#: core/models.py:1882 -msgid "download" -msgstr "Herunterladen" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Herunterladen" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Sie können kein digitales Asset für eine nicht abgeschlossene Bestellung " -"herunterladen" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Kommentare zum Feedback" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese " -"Rückmeldung bezieht" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Produkt zur Bestellung" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Produktbewertung" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Rückmeldung" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"Sie müssen einen Kommentar, eine Bewertung und eine Produktnummer angeben, " -"um eine Bewertung abzugeben." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Fehler bei der Erstellung des Promocodes: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Bestätigung der Bestellung" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hallo %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Vielen Dank für Ihre Bestellung #%(order.pk)s! Wir freuen uns, Ihnen " -"mitteilen zu können, dass wir Ihre Bestellung in Arbeit genommen haben. " -"Nachfolgend finden Sie die Details Ihrer Bestellung:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Insgesamt" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Gesamtpreis" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Wenn Sie Fragen haben, wenden Sie sich bitte an unseren Support unter " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Mit freundlichen Grüßen,
das %(config.PROJECT_NAME)s Team" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Alle Rechte vorbehalten" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Bestellung Geliefert" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Hallo %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Wir haben Ihre Bestellung erfolgreich bearbeitet №%(order_uuid)s! " -"Nachstehend finden Sie die Details Ihrer Bestellung:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"zusätzliche\n" -" Informationen" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Wert" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"Wenn Sie Fragen haben, wenden Sie sich bitte an unseren Support unter " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Mit freundlichen Grüßen,
das %(project_name)s Team" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Schlüssel" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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. " -"Nachstehend finden Sie die Details Ihrer Bestellung:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Versandpreis" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Ihre Bestellung wird an die folgende Adresse geliefert:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Mit freundlichen Grüßen,
das %(config.PROJECT_NAME)s Team" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"alle Rechte\n" -" vorbehalten" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Sowohl Daten als auch Timeout sind erforderlich" - -#: core/utils/caching.py:43 -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" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} muss Modell sein" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} muss ein Listenobjekt sein" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Kontakt initiiert" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Auftragsbestätigung" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Auftrag ausgeliefert" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "Sie haben nicht die Erlaubnis, diese Aktion durchzuführen." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Der Parameter NOMINATIM_URL muss konfiguriert werden!" - -#: core/validators.py:16 -#, python-brace-format -msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" -"Die Bildabmessungen sollten w{max_width} x h{max_height} Pixel nicht " -"überschreiten" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Ungültiges Rufnummernformat" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Sie können das digitale Asset nur einmal herunterladen" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "Favicon nicht gefunden" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Geokodierungsfehler: {e}" diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo deleted file mode 100644 index 5b92c417..00000000 Binary files a/core/locale/en_GB/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/en_GB/LC_MESSAGES/django.po b/core/locale/en_GB/LC_MESSAGES/django.po deleted file mode 100644 index ba53b619..00000000 --- a/core/locale/en_GB/LC_MESSAGES/django.po +++ /dev/null @@ -1,2300 +0,0 @@ -# eVibes Translations. -# 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: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: en-GB\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Unique ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "Unique ID is used to surely identify any database object" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Is Active" - -#: core/abstract.py:21 -msgid "" -"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" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Created" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "When the object first appeared on the database" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modified" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "When the object was last edited" - -#: core/admin.py:55 -msgid "translations" -msgstr "Translations" - -#: core/admin.py:59 -msgid "general" -msgstr "General" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relations" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadata" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Timestamps" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Activate selected %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s activated successfully!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Deactivate selected %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s deactivated successfully." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Attribute Value" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Attribute Values" - -#: core/admin.py:124 -msgid "image" -msgstr "Image" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Images" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stock" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Stocks" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Order Product" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Order Products" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Children" - -#: core/admin.py:471 -msgid "Config" -msgstr "Config" - -#: core/apps.py:8 -msgid "core" -msgstr "Core" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Finished" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Delivering" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Delivered" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Canceled" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Failed" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "Pending" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Accepted" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Money Returned" - -#: core/choices.py:17 -msgid "payment" -msgstr "Payment" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Successful" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Cache I/O" - -#: core/docs/drf/views.py:19 -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 "" -"Apply only a key to read permitted data from cache.\n" -"Apply key, data and timeout with authentication to write data to cache." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Get a list of supported languages" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Get application's exposable parameters" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Send a message to the support team" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Request a CORSed URL. Only https allowed." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "Global search endpoint to query across project's tables" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Purchase an order as a Business" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "List all attribute groups (simple view)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Retrieve a single attribute group (detailed view)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Create an attribute group" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Delete an attribute group" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "Rewrite an existing attribute group saving non-editables" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" -"Rewrite some fields of an existing attribute group saving non-editables" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "List all attributes (simple view)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Retrieve a single attribute (detailed view)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Create an attribute" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Delete an attribute" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Rewrite an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "Rewrite some fields of an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "List all attribute values (simple view)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Retrieve a single attribute value (detailed view)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Create an attribute value" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Delete an attribute value" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "Rewrite an existing attribute value saving non-editables" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" -"Rewrite some fields of an existing attribute value saving non-editables" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "List all categories (simple view)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Retrieve a single category (detailed view)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Create a category" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Delete a category" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Rewrite an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "Rewrite some fields of an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "List all categories (simple view)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "For non-staff users, only their own orders are returned." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filter orders with buy_time >= this ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filter orders with buy_time <= this ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filter by exact order UUID" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filter by exact human-readable order ID" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "Filter by user's email (case-insensitive exact match)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filter by user's UUID" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "Filter by order status (case-insensitive substring match)" - -#: core/docs/drf/viewsets.py:201 -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')." -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')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Retrieve a single category (detailed view)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Create an attribute" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Doesn't work for non-staff users." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Delete an attribute" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Rewrite an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "Rewrite some fields of an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Purchase price at order time" - -#: core/docs/drf/viewsets.py:233 -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 "" -"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." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "purchase an order without account creation" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finalizes the order purchase for a non-registered user." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Add a product to the order" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adds a product to an order using the provided `product_uuid` and " -"`attributes`." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Add a list of products to order, quantities will not count" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Remove a product from the order" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Removes a product from an order using the provided `product_uuid` and " -"`attributes`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Remove a product from order, quantities will not count" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Removes a list of products from an order using the provided `product_uuid` " -"and `attributes`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "List all attributes (simple view)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "For non-staff users, only their own wishlists are returned." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Retrieve a single attribute (detailed view)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Create an attribute" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Doesn't work for non-staff users." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Delete an attribute" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Rewrite an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "Rewrite some fields of an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Add a product to the order" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "Adds a product to an wishlist using the provided `product_uuid`" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Remove a product from the wishlist" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "Removes a product from an wishlist using the provided `product_uuid`" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Add many products to the wishlist" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "Adds many products to an wishlist using the provided `product_uuids`" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Remove a product from the order" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Removes many products from an wishlist using the provided `product_uuids`" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"• **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" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "List all products (simple view)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(exact) Product UUID" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Product name" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(list) Category names, case-insensitive" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(exact) Category UUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(list) Tag names, case-insensitive" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum stock price" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximum stock price" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(exact) Only active products" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Brand name" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimum stock quantity" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digital vs. physical" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Allowed:** uuid, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Retrieve a single product (detailed view)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "Product UUID or Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Create a product" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Rewrite an existing product, preserving non-editable fields" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Update some fields of an existing product, preserving non-editable fields" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Delete a product" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "lists all permitted feedbacks for a product" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "List all addresses" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Retrieve a single address" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Create a new address" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Delete an address" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Update an entire address" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Partially update an address" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Autocomplete address input" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "Raw data query string, please append with data from geo-IP endpoint" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "limits the results amount, 1 < limit < 10, default: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "list all feedbacks (simple view)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "retrieve a single feedback (detailed view)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "create a feedback" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "delete a feedback" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "rewrite an existing feedback saving non-editables" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "rewrite some fields of an existing feedback saving non-editables" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "list all order–product relations (simple view)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "retrieve a single order–product relation (detailed view)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "create a new order–product relation" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "replace an existing order–product relation" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "partially update an existing order–product relation" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "delete an order–product relation" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "add or remove feedback on an order–product relation" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "No search term provided." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Name" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Categories" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Categories Slugs" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tags" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Min Price" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Max Price" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Is Active" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Brand" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Attributes" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Quantity" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Slug" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Is Digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Include sub-categories" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "There must be a category_uuid to use include_subcategories flag" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Search (ID, product name or part number)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Bought after (inclusive)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Bought before (inclusive)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "User email" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "User UUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "Status" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Human Readable ID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Parent" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Whole category(has at least 1 product or not)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Level" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "Product UUID" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Key to look for in or set into the cache" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Data to store in cache" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Timeout in seconds to set the data for into the cache" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Cached data" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Camelized JSON data from the requested URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Only URLs starting with http(s):// are allowed" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Add a product to the order" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Order {order_uuid} not found" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Remove all products from the order" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Buy an order" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Wrong type came from order.buy() method: {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Perform an action on a list of products in the order" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Remove/Add" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Action must be either \"add\" or \"remove\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Add a product to the order" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Wishlist {wishlist_uuid} not found" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Buy an order" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Original address string provided by the user" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} does not exist: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Limit must be between 1 and 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - works like a charm" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Attributes" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Grouped attributes" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Groups of attributes" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Categories" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Brands" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Categories" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Markup Percentage" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "Which attributes and values can be used for filtering this category." - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "" -"Minimum and maximum prices for products in this category, if available." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tags for this category" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Products in this category" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Vendors" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Latitude (Y coordinate)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Longitude (X coordinate)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Comment" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Represents feedback from a user." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Notifications" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Download url for this order product if applicable" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "A list of order products in this order" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Billing address" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Shipping address for this order, leave blank if same as billing address or " -"if not applicable" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Total price of this order" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Total quantity of products in order" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Are all of the products in the order digital" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Orders" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Image URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Product's images" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Category" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Feedbacks" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Brand" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Attribute groups" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Price" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Quantity" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Number of feedbacks" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Products" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Promocodes" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Products on sale" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promotions" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Vendor" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Product" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Wishlisted products" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Wishlists" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Tagged products" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Product tags" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Tagged categories" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Categories' tags" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Project name" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Company Email" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Company Name" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Company Address" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Company Phone Number" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Email host user" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Maximum amount for payment" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Minimum amount for payment" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Analytics data" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Advertisement data" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configuration" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Language code" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Language name" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Language flag, if exists :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Get a list of supported languages" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Products search results" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Products search results" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Parent of this group" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Parent attribute group" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Attribute group's name" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Attribute group" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Stores credentials and endpoints required for vendor's API communication" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Authentication info" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Define the markup for products retrieved from this vendor" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Vendor markup percentage" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Name of this vendor" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Vendor name" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Internal tag identifier for the product tag" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Tag name" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "User-friendly name for the product tag" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Tag display name" - -#: core/models.py:213 -msgid "product tag" -msgstr "Product tag" - -#: core/models.py:251 -msgid "category tag" -msgstr "category tag" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "category tags" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Upload an image representing this category" - -#: core/models.py:332 -msgid "category image" -msgstr "Category image" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Define a markup percentage for products in this category" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Parent of this category to form a hierarchical structure" - -#: core/models.py:347 -msgid "parent category" -msgstr "Parent category" - -#: core/models.py:352 -msgid "category name" -msgstr "Category name" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Provide a name for this category" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Add a detailed description for this category" - -#: core/models.py:361 -msgid "category description" -msgstr "Category description" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "tags that help describe or group this category" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Priority" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Name of this brand" - -#: core/models.py:430 -msgid "brand name" -msgstr "Brand name" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Upload a logo representing this brand" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Brand small image" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Upload a big logo representing this brand" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Brand big image" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Add a detailed description of the brand" - -#: core/models.py:453 -msgid "brand description" -msgstr "Brand description" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Optional categories that this brand is associated with" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Categories" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Category this product belongs to" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Optionally associate this product with a brand" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tags that help describe or group this product" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Indicates whether this product is digitally delivered" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Is product digital" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Provide a clear identifying name for the product" - -#: core/models.py:556 -msgid "product name" -msgstr "Product name" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Add a detailed description of the product" - -#: core/models.py:562 -msgid "product description" -msgstr "Product description" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Part number for this product" - -#: core/models.py:570 -msgid "part number" -msgstr "Part number" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Category of this attribute" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Group of this attribute" - -#: core/models.py:690 -msgid "string" -msgstr "String" - -#: core/models.py:691 -msgid "integer" -msgstr "Integer" - -#: core/models.py:692 -msgid "float" -msgstr "Float" - -#: core/models.py:693 -msgid "boolean" -msgstr "Boolean" - -#: core/models.py:694 -msgid "array" -msgstr "Array" - -#: core/models.py:695 -msgid "object" -msgstr "Object" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Type of the attribute's value" - -#: core/models.py:698 -msgid "value type" -msgstr "Value type" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Name of this attribute" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Attribute's name" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Attribute" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Attribute of this value" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "The specific product associated with this attribute's value" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Associated product" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "The specific value for this attribute" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Provide alternative text for the image for accessibility" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Image alt text" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Upload the image file for this product" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Product image" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Determines the order in which images are displayed" - -#: core/models.py:806 -msgid "display priority" -msgstr "Display priority" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "The product that this image represents" - -#: core/models.py:825 -msgid "product images" -msgstr "Product images" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Percentage discount for the selected products" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Discount percentage" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Provide a unique name for this promotion" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Promotion name" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Promotion description" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Select which products are included in this promotion" - -#: core/models.py:885 -msgid "included products" -msgstr "Included products" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promotion" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "The vendor supplying this product stock" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Associated vendor" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Final price to the customer after markups" - -#: core/models.py:930 -msgid "selling price" -msgstr "Selling price" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "The product associated with this stock entry" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "The price paid to the vendor for this product" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Vendor purchase price" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Available quantity of the product in stock" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Quantity in stock" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "Vendor-assigned SKU for identifying the product" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "Vendor's SKU" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Digital file associated with this stock if applicable" - -#: core/models.py:961 -msgid "digital file" -msgstr "Digital file" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Stock entries" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Products that the user has marked as wanted" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "User who owns this wishlist" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Wishlist's Owner" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Wishlist" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} does not exist: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documentary" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentaries" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Unresolved" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Address line for the customer" - -#: core/models.py:1129 -msgid "address line" -msgstr "Address line" - -#: core/models.py:1131 -msgid "street" -msgstr "Street" - -#: core/models.py:1132 -msgid "district" -msgstr "District" - -#: core/models.py:1133 -msgid "city" -msgstr "City" - -#: core/models.py:1134 -msgid "region" -msgstr "Region" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Postal code" - -#: core/models.py:1136 -msgid "country" -msgstr "Country" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolocation Point(Longitude, Latitude)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Full JSON response from geocoder for this address" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Stored JSON response from the geocoding service" - -#: core/models.py:1159 -msgid "address" -msgstr "Address" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adresses" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Unique code used by a user to redeem a discount" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Promo code identifier" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Fixed discount amount applied if percent is not used" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Fixed discount amount" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Percentage discount applied if fixed amount is not used" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Percentage discount" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Timestamp when the promocode expires" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "End validity time" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Timestamp from which this promocode is valid" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Start validity time" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "Timestamp when the promocode was used, blank if not used yet" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Usage timestamp" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "User assigned to this promocode if applicable" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Assigned user" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Promo code" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Promo codes" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Only one type of discount should be defined (amount or percent), but not " -"both or neither." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Promocode has been used already" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Invalid discount type for promocode {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "The billing address used for this order" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Optional promo code applied to this order" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Applied promo code" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "The shipping address used for this order" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Shipping address" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Current status of the order in its lifecycle" - -#: core/models.py:1349 -msgid "order status" -msgstr "Order status" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"JSON structure of notifications to display to users, in admin UI the table-" -"view is used" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "JSON representation of order attributes for this order" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "The user who placed the order" - -#: core/models.py:1367 -msgid "user" -msgstr "User" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "The timestamp when the order was finalized" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Buy time" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "A human-readable identifier for the order" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "human-readable ID" - -#: core/models.py:1388 -msgid "order" -msgstr "Order" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "A user must have only one pending order at a time!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "You cannot add products to an order that is not a pending one" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "You cannot add inactive products to order" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "You cannot add more products than available in stock" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "You cannot remove products from an order that is not a pending one" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} does not exist with query <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Promocode does not exist" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "You can only buy physical products with shipping address specified!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Address does not exist" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"You can not purchase at this moment, please try again in a few minutes." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Invalid force value" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "You cannot purchase an empty order!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Insufficient funds to complete the order" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Invalid payment method: {payment_method} from {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "The price paid by the customer for this product at purchase time" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Purchase price at order time" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Internal comments for admins about this ordered product" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Internal comments" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "User notifications" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "JSON representation of this item's attributes" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Ordered product attributes" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Reference to the parent order that contains this product" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Parent order" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "The specific product associated with this order line" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Quantity of this specific product in the order" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Product quantity" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Current status of this product in the order" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Product line status" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "wrong action specified for feedback: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "you cannot feedback an order which is not received" - -#: core/models.py:1882 -msgid "download" -msgstr "Download" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Downloads" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "You can not download a digital asset for a non-finished order" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "User-provided comments about their experience with the product" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Feedback comments" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"References the specific product in an order that this feedback is about" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Related order product" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "User-assigned rating for the product" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Product rating" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Feedback" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"you must provide a comment, rating, and order product uuid to add feedback." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Error during promocode creation: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Order Confirmation" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hello %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" 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:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Total" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Total Price" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"If you have any questions, feel free to contact our support at " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Best regards,
the %(config.PROJECT_NAME)s team" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "All rights reserved" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Order Delivered" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Hello %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"We have successfully processed your order №%(order_uuid)s! Below are the " -"details of your order:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"additional\n" -" information" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Value" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"If you have any questions, feel free to contact our support at " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Best regards,
the %(project_name)s team" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Key" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Shipping price" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Your order will be delivered to the following address:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Best regards,
the %(config.PROJECT_NAME)s team" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"All rights\n" -" reserved" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Both data and timeout are required" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} must be model" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} must be list object" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Contact Us initiated" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Order Confirmation" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Order Delivered" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "You do not have permission to perform this action." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "NOMINATIM_URL parameter must be configured!" - -#: core/validators.py:16 -#, python-brace-format -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" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Invalid phone number format" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "You can only download the digital asset once" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon not found" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Geocoding error: {e}" - -#~ msgid "I18N" -#~ msgstr "Internationalization" - -#~ msgid "name" -#~ msgstr "Name" - -#~ msgid "rating" -#~ msgstr "Rating" - -#~ msgid "is business" -#~ msgstr "Is Business" - -#~ msgid "brand slug" -#~ msgstr "Brand's slug" - -#~ msgid "basic info" -#~ msgstr "Basic Info" - -#~ msgid "important dates" -#~ msgstr "Important Dates" - -#~ msgid "eVibes Engine" -#~ msgstr "eVibes Engine" diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo deleted file mode 100644 index fb9ef2f3..00000000 Binary files a/core/locale/en_US/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/en_US/LC_MESSAGES/django.po b/core/locale/en_US/LC_MESSAGES/django.po deleted file mode 100644 index e904e8d9..00000000 --- a/core/locale/en_US/LC_MESSAGES/django.po +++ /dev/null @@ -1,2271 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: en-us\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Unique ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "Unique ID is used to surely identify any database object" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Is Active" - -#: core/abstract.py:21 -msgid "" -"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" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Created" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "When the object first appeared on the database" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modified" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "When the object was last edited" - -#: core/admin.py:55 -msgid "translations" -msgstr "Translations" - -#: core/admin.py:59 -msgid "general" -msgstr "General" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relations" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadata" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Timestamps" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Activate selected %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s activated successfully!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Deactivate selected %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s deactivated successfully." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Attribute Value" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Attribute Values" - -#: core/admin.py:124 -msgid "image" -msgstr "Image" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Images" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stock" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Stocks" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Order Product" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Order Products" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Children" - -#: core/admin.py:471 -msgid "Config" -msgstr "Config" - -#: core/apps.py:8 -msgid "core" -msgstr "Core" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Finished" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Delivering" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Delivered" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Canceled" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Failed" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "Pending" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Accepted" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Money Returned" - -#: core/choices.py:17 -msgid "payment" -msgstr "Payment" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Successful" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Cache I/O" - -#: core/docs/drf/views.py:19 -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 "" -"Apply only a key to read permitted data from cache.\n" -"Apply key, data and timeout with authentication to write data to cache." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Get a list of supported languages" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Get application's exposable parameters" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Send a message to the support team" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Request a CORSed URL. Only https allowed." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "Global search endpoint to query across project's tables" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Purchase an order as a Business" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "List all attribute groups (simple view)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Retrieve a single attribute group (detailed view)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Create an attribute group" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Delete an attribute group" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "Rewrite an existing attribute group saving non-editables" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" -"Rewrite some fields of an existing attribute group saving non-editables" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "List all attributes (simple view)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Retrieve a single attribute (detailed view)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Create an attribute" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Delete an attribute" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Rewrite an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "Rewrite some fields of an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "List all attribute values (simple view)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Retrieve a single attribute value (detailed view)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Create an attribute value" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Delete an attribute value" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "Rewrite an existing attribute value saving non-editables" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" -"Rewrite some fields of an existing attribute value saving non-editables" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "List all categories (simple view)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Retrieve a single category (detailed view)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Create a category" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Delete a category" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Rewrite an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "Rewrite some fields of an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "List all categories (simple view)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "For non-staff users, only their own orders are returned." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filter orders with buy_time >= this ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filter orders with buy_time <= this ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filter by exact order UUID" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filter by exact human-readable order ID" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "Filter by user's email (case-insensitive exact match)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filter by user's UUID" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "Filter by order status (case-insensitive substring match)" - -#: core/docs/drf/viewsets.py:201 -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')." -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')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Retrieve a single category (detailed view)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Create an attribute" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Doesn't work for non-staff users." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Delete an attribute" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Rewrite an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "Rewrite some fields of an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Purchase price at order time" - -#: core/docs/drf/viewsets.py:233 -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 "" -"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." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "purchase an order without account creation" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finalizes the order purchase for a non-registered user." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Add a product to the order" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adds a product to an order using the provided `product_uuid` and " -"`attributes`." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Add a list of products to order, quantities will not count" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Remove a product from the order" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Removes a product from an order using the provided `product_uuid` and " -"`attributes`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Remove a product from order, quantities will not count" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Removes a list of products from an order using the provided `product_uuid` " -"and `attributes`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "List all attributes (simple view)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "For non-staff users, only their own wishlists are returned." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Retrieve a single attribute (detailed view)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Create an attribute" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Doesn't work for non-staff users." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Delete an attribute" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Rewrite an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "Rewrite some fields of an existing attribute saving non-editables" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Add a product to the order" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "Adds a product to an wishlist using the provided `product_uuid`" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Remove a product from the wishlist" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "Removes a product from an wishlist using the provided `product_uuid`" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Add many products to the wishlist" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "Adds many products to an wishlist using the provided `product_uuids`" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Remove a product from the order" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Removes many products from an wishlist using the provided `product_uuids`" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"• **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" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "List all products (simple view)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(exact) Product UUID" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Product name" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(list) Category names, case-insensitive" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(exact) Category UUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(list) Tag names, case-insensitive" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum stock price" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximum stock price" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(exact) Only active products" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Brand name" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimum stock quantity" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digital vs. physical" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Allowed:** uuid, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Retrieve a single product (detailed view)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "Product UUID or Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Create a product" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Rewrite an existing product, preserving non-editable fields" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Update some fields of an existing product, preserving non-editable fields" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Delete a product" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "lists all permitted feedbacks for a product" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "List all addresses" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Retrieve a single address" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Create a new address" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Delete an address" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Update an entire address" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Partially update an address" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Autocomplete address input" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "Raw data query string, please append with data from geo-IP endpoint" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "limits the results amount, 1 < limit < 10, default: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "list all feedbacks (simple view)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "retrieve a single feedback (detailed view)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "create a feedback" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "delete a feedback" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "rewrite an existing feedback saving non-editables" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "rewrite some fields of an existing feedback saving non-editables" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "list all order–product relations (simple view)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "retrieve a single order–product relation (detailed view)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "create a new order–product relation" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "replace an existing order–product relation" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "partially update an existing order–product relation" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "delete an order–product relation" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "add or remove feedback on an order–product relation" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "No search term provided." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Name" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Categories" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Categories Slugs" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tags" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Min Price" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Max Price" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Is Active" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Brand" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Attributes" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Quantity" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Slug" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Is Digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Include sub-categories" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "There must be a category_uuid to use include_subcategories flag" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Search (ID, product name or part number)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Bought after (inclusive)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Bought before (inclusive)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "User email" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "User UUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "Status" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Human Readable ID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Parent" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Whole category(has at least 1 product or not)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Level" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "Product UUID" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Key to look for in or set into the cache" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Data to store in cache" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Timeout in seconds to set the data for into the cache" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Cached data" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Camelized JSON data from the requested URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Only URLs starting with http(s):// are allowed" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Add a product to the order" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Order {order_uuid} not found" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Remove all products from the order" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Buy an order" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Wrong type came from order.buy() method: {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Perform an action on a list of products in the order" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Remove/Add" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Action must be either \"add\" or \"remove\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Add a product to the order" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Wishlist {wishlist_uuid} not found" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Remove a product from the order" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Buy an order" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Original address string provided by the user" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} does not exist: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Limit must be between 1 and 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - works like a charm" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Attributes" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Grouped attributes" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Groups of attributes" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Categories" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Brands" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Categories" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Markup Percentage" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "Which attributes and values can be used for filtering this category." - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "" -"Minimum and maximum prices for products in this category, if available." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tags for this category" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Products in this category" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Vendors" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Latitude (Y coordinate)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Longitude (X coordinate)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "How to" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Represents feedback from a user." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Notifications" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Download url for this order product if applicable" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "A list of order products in this order" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Billing address" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Shipping address for this order, leave blank if same as billing address or " -"if not applicable" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Total price of this order" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Total quantity of products in order" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Are all of the products in the order digital" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Orders" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Image URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Product's images" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Category" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Feedbacks" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Brand" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Attribute groups" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Price" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Quantity" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Number of feedbacks" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Products" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Promocodes" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Products on sale" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promotions" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Vendor" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Product" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Wishlisted products" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Wishlists" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Tagged products" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Product tags" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Tagged categories" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Categories' tags" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Project name" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Company Email" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Company Name" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Company Address" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Company Phone Number" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Email host user" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Maximum amount for payment" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Minimum amount for payment" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Analytics data" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Advertisement data" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configuration" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Language code" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Language name" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Language flag, if exists :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Get a list of supported languages" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Products search results" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Products search results" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Parent of this group" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Parent attribute group" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Attribute group's name" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Attribute group" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Stores credentials and endpoints required for vendor's API communication" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Authentication info" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Define the markup for products retrieved from this vendor" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Vendor markup percentage" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Name of this vendor" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Vendor name" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Internal tag identifier for the product tag" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Tag name" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "User-friendly name for the product tag" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Tag display name" - -#: core/models.py:213 -msgid "product tag" -msgstr "Product tag" - -#: core/models.py:251 -msgid "category tag" -msgstr "category tag" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "category tags" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Upload an image representing this category" - -#: core/models.py:332 -msgid "category image" -msgstr "Category image" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Define a markup percentage for products in this category" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Parent of this category to form a hierarchical structure" - -#: core/models.py:347 -msgid "parent category" -msgstr "Parent category" - -#: core/models.py:352 -msgid "category name" -msgstr "Category name" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Provide a name for this category" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Add a detailed description for this category" - -#: core/models.py:361 -msgid "category description" -msgstr "Category description" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "tags that help describe or group this category" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Priority" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Name of this brand" - -#: core/models.py:430 -msgid "brand name" -msgstr "Brand name" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Upload a logo representing this brand" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Brand small image" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Upload a big logo representing this brand" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Brand big image" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Add a detailed description of the brand" - -#: core/models.py:453 -msgid "brand description" -msgstr "Brand description" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Optional categories that this brand is associated with" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Categories" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Category this product belongs to" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Optionally associate this product with a brand" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tags that help describe or group this product" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Indicates whether this product is digitally delivered" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Is product digital" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Provide a clear identifying name for the product" - -#: core/models.py:556 -msgid "product name" -msgstr "Product name" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Add a detailed description of the product" - -#: core/models.py:562 -msgid "product description" -msgstr "Product description" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Part number for this product" - -#: core/models.py:570 -msgid "part number" -msgstr "Part number" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Category of this attribute" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Group of this attribute" - -#: core/models.py:690 -msgid "string" -msgstr "String" - -#: core/models.py:691 -msgid "integer" -msgstr "Integer" - -#: core/models.py:692 -msgid "float" -msgstr "Float" - -#: core/models.py:693 -msgid "boolean" -msgstr "Boolean" - -#: core/models.py:694 -msgid "array" -msgstr "Array" - -#: core/models.py:695 -msgid "object" -msgstr "Object" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Type of the attribute's value" - -#: core/models.py:698 -msgid "value type" -msgstr "Value type" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Name of this attribute" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Attribute's name" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Attribute" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Attribute of this value" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "The specific product associated with this attribute's value" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Associated product" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "The specific value for this attribute" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Provide alternative text for the image for accessibility" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Image alt text" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Upload the image file for this product" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Product image" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Determines the order in which images are displayed" - -#: core/models.py:806 -msgid "display priority" -msgstr "Display priority" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "The product that this image represents" - -#: core/models.py:825 -msgid "product images" -msgstr "Product images" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Percentage discount for the selected products" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Discount percentage" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Provide a unique name for this promotion" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Promotion name" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Promotion description" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Select which products are included in this promotion" - -#: core/models.py:885 -msgid "included products" -msgstr "Included products" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promotion" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "The vendor supplying this product stock" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Associated vendor" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Final price to the customer after markups" - -#: core/models.py:930 -msgid "selling price" -msgstr "Selling price" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "The product associated with this stock entry" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "The price paid to the vendor for this product" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Vendor purchase price" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Available quantity of the product in stock" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Quantity in stock" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "Vendor-assigned SKU for identifying the product" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "Vendor's SKU" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Digital file associated with this stock if applicable" - -#: core/models.py:961 -msgid "digital file" -msgstr "Digital file" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Stock entries" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Products that the user has marked as wanted" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "User who owns this wishlist" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Wishlist's Owner" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Wishlist" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} does not exist: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documentary" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentaries" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Unresolved" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Address line for the customer" - -#: core/models.py:1129 -msgid "address line" -msgstr "Address line" - -#: core/models.py:1131 -msgid "street" -msgstr "Street" - -#: core/models.py:1132 -msgid "district" -msgstr "District" - -#: core/models.py:1133 -msgid "city" -msgstr "City" - -#: core/models.py:1134 -msgid "region" -msgstr "Region" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Postal code" - -#: core/models.py:1136 -msgid "country" -msgstr "Country" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolocation Point(Longitude, Latitude)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Full JSON response from geocoder for this address" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Stored JSON response from the geocoding service" - -#: core/models.py:1159 -msgid "address" -msgstr "Address" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adresses" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Unique code used by a user to redeem a discount" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Promo code identifier" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Fixed discount amount applied if percent is not used" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Fixed discount amount" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Percentage discount applied if fixed amount is not used" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Percentage discount" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Timestamp when the promocode expires" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "End validity time" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Timestamp from which this promocode is valid" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Start validity time" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "Timestamp when the promocode was used, blank if not used yet" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Usage timestamp" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "User assigned to this promocode if applicable" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Assigned user" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Promo code" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Promo codes" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Only one type of discount should be defined (amount or percent), but not " -"both or neither." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Promocode has been used already" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Invalid discount type for promocode {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "The billing address used for this order" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Optional promo code applied to this order" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Applied promo code" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "The shipping address used for this order" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Shipping address" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Current status of the order in its lifecycle" - -#: core/models.py:1349 -msgid "order status" -msgstr "Order status" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"JSON structure of notifications to display to users, in admin UI the table-" -"view is used" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "JSON representation of order attributes for this order" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "The user who placed the order" - -#: core/models.py:1367 -msgid "user" -msgstr "User" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "The timestamp when the order was finalized" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Buy time" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "A human-readable identifier for the order" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "human-readable ID" - -#: core/models.py:1388 -msgid "order" -msgstr "Order" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "A user must have only one pending order at a time!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "You cannot add products to an order that is not a pending one" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "You cannot add inactive products to order" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "You cannot add more products than available in stock" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "You cannot remove products from an order that is not a pending one" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} does not exist with query <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Promocode does not exist" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "You can only buy physical products with shipping address specified!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Address does not exist" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"You can not purchase at this moment, please try again in a few minutes." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Invalid force value" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "You cannot purchase an empty order!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Insufficient funds to complete the order" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Invalid payment method: {payment_method} from {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "The price paid by the customer for this product at purchase time" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Purchase price at order time" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Internal comments for admins about this ordered product" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Internal comments" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "User notifications" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "JSON representation of this item's attributes" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Ordered product attributes" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Reference to the parent order that contains this product" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Parent order" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "The specific product associated with this order line" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Quantity of this specific product in the order" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Product quantity" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Current status of this product in the order" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Product line status" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "wrong action specified for feedback: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "you cannot feedback an order which is not received" - -#: core/models.py:1882 -msgid "download" -msgstr "Download" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Downloads" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "You can not download a digital asset for a non-finished order" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "User-provided comments about their experience with the product" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Feedback comments" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"References the specific product in an order that this feedback is about" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Related order product" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "User-assigned rating for the product" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Product rating" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Feedback" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"you must provide a comment, rating, and order product uuid to add feedback." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Error during promocode creation: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Order Confirmation" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hello %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" 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:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Total" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Total Price" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"If you have any questions, feel free to contact our support at " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Best regards,
the %(config.PROJECT_NAME)s team" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "All rights reserved" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Order Delivered" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Hello %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"We have successfully processed your order №%(order_uuid)s! Below are the " -"details of your order:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"additional\n" -" information" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Value" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"If you have any questions, feel free to contact our support at " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Best regards,
the %(project_name)s team" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Key" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Shipping price" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Your order will be delivered to the following address:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Best regards,
the %(config.PROJECT_NAME)s team" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"all rights\n" -" reserved" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Both data and timeout are required" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} must be model" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} must be list object" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Contact Us initiated" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Order Confirmation" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Order Delivered" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "You do not have permission to perform this action." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "NOMINATIM_URL parameter must be configured!" - -#: core/validators.py:16 -#, python-brace-format -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" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Invalid phone number format" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "You can only download the digital asset once" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon not found" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Geocoding error: {e}" diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo deleted file mode 100644 index 85c222c7..00000000 Binary files a/core/locale/es_ES/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/core/locale/es_ES/LC_MESSAGES/django.po deleted file mode 100644 index d236fe42..00000000 --- a/core/locale/es_ES/LC_MESSAGES/django.po +++ /dev/null @@ -1,2327 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: es-es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Identificación única" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"El identificador único se utiliza para identificar con seguridad cualquier " -"objeto de la base de datos" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Está activo" - -#: core/abstract.py:21 -msgid "" -"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" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Creado" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Cuando el objeto apareció por primera vez en la base de datos" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modificado" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Cuándo se editó el objeto por última vez" - -#: core/admin.py:55 -msgid "translations" -msgstr "Traducciones" - -#: core/admin.py:59 -msgid "general" -msgstr "General" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relaciones" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadatos" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Marcas de tiempo" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Activar %(verbose_name_plural)s seleccionados" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "¡%(verbose_name_plural)s activado con éxito!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Desactivar %(verbose_name_plural)s seleccionados" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s desactivado con éxito." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Atributo Valor" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Valores de los atributos" - -#: core/admin.py:124 -msgid "image" -msgstr "Imagen" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Imágenes" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stock" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Acciones" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Pedir un producto" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Pedir productos" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Niños" - -#: core/admin.py:471 -msgid "Config" -msgstr "Configurar" - -#: core/apps.py:8 -msgid "core" -msgstr "Núcleo" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Terminado" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "En" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Entregado" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Cancelado" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Fallido" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "Pendiente" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Aceptado" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Dinero devuelto" - -#: core/choices.py:17 -msgid "payment" -msgstr "Pago" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momento" - -#: core/choices.py:24 -msgid "successful" -msgstr "Éxito" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "E/S de caché" - -#: core/docs/drf/views.py:19 -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 "" -"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é." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Obtener una lista de los idiomas admitidos" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Obtener los parámetros exponibles de la aplicación" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Enviar un mensaje al equipo de asistencia" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Solicitar una URL CORSed. Solo se permite https." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" -"Punto final de búsqueda global para consultar todas las tablas del proyecto" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Comprar un pedido como empresa" - -#: core/docs/drf/views.py:98 -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`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Lista de todos los grupos de atributos (vista simple)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Recuperar un único grupo de atributos (vista detallada)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Crear un grupo de atributos" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Eliminar un grupo de atributos" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "Reescribir un grupo de atributos existente guardando los no editables" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Listar todos los atributos (vista simple)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Recuperar un único atributo (vista detallada)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Crear un atributo" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Borrar un atributo" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Reescribir un atributo existente guardando los no editables" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Reescribir algunos campos de un atributo existente guardando los no editables" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Listar todos los valores de atributos (vista simple)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Recuperar un único valor de atributo (vista detallada)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Crear un valor de atributo" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Borrar un valor de atributo" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "Reescribir un valor de atributo existente guardando los no editables" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Lista de todas las categorías (vista simple)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Recuperar una sola categoría (vista detallada)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Crear una categoría" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Eliminar una categoría" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Reescribir una categoría existente guardando los no editables" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Reescribir algunos campos de una categoría existente guardando los no " -"editables" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Lista de todas las categorías (vista simple)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Para los usuarios que no forman parte del personal, sólo se devuelven sus " -"propios pedidos." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtrar los pedidos con buy_time >= esta fecha ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtrar pedidos con hora de compra <= esta fecha ISO 8601" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtrar por UUID de pedido exacto" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtrar por ID de pedido exacto legible por el ser humano" - -#: core/docs/drf/viewsets.py:185 -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)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrar por UUID de usuario" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Filtrar por estado del pedido (coincidencia de subcadenas insensible a " -"mayúsculas y minúsculas)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"Ordenar por: uuid, human_readable_id, user_email, user, status, created, " -"modified, buy_time, random. Utilice el prefijo '-' para orden descendente " -"(por ejemplo, '-tiempo_compra')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Recuperar una sola categoría (vista detallada)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Crear un atributo" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "No funciona para los usuarios que no son personal." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Borrar un atributo" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Reescribir una categoría existente guardando los no editables" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Reescribir algunos campos de una categoría existente guardando los no " -"editables" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Precio de compra en el momento del pedido" - -#: core/docs/drf/viewsets.py:233 -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 "" -"Finaliza la compra del pedido. Si se utiliza `force_balance`, la compra se " -"finaliza utilizando el saldo del usuario; Si se utiliza `force_payment`, se " -"inicia una transacción." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "comprar un pedido sin crear una cuenta" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finaliza la compra del pedido para un usuario no registrado." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Añadir un producto al pedido" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Añade un producto a un pedido utilizando el `product_uuid` y los " -"`attributes` proporcionados." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Añadir una lista de productos a la orden, las cantidades no contarán" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Añade una lista de productos a un pedido utilizando el `product_uuid` y los " -"`attributes` proporcionados." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Eliminar un producto del pedido" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Elimina un producto de un pedido utilizando el `product_uuid` y los " -"`attributes` proporcionados." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Eliminar un producto del pedido, las cantidades no contarán" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Elimina una lista de productos de un pedido utilizando el `product_uuid` y " -"los `attributes` proporcionados." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Listar todos los atributos (vista simple)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Para los usuarios que no forman parte del personal, sólo se devuelven sus " -"propias listas de deseos." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Recuperar un único atributo (vista detallada)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Crear un atributo" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "No funciona para los usuarios que no son personal." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Borrar un atributo" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Reescribir un atributo existente guardando los no editables" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Reescribir algunos campos de un atributo existente guardando los no editables" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Añadir un producto al pedido" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Añade un producto a una lista de deseos utilizando el `product_uuid` " -"proporcionado" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Eliminar un producto de la lista de deseos" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Elimina un producto de una lista de deseos utilizando el `product_uuid` " -"proporcionado." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Añadir muchos productos a la lista de deseos" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Añade varios productos a una lista de deseos utilizando los `product_uuids` " -"proporcionados." - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Eliminar un producto del pedido" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Elimina varios productos de una lista de deseos utilizando los " -"`product_uuids` proporcionados." - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Ejemplos: \n" -"`color=rojo exacto`, `tamaño=gt-10`, `características=en-[\"wifi\", " -"\"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`." - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Listar todos los productos (vista simple)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "UUID (exacto) del producto" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Nombre del producto" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(lista) Nombres de categoría, sin distinción entre mayúsculas y minúsculas" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(exacto) Categoría UUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "" -"(lista) Nombres de etiquetas, sin distinción entre mayúsculas y minúsculas" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Precio mínimo de las acciones" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Precio máximo de las acciones" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(exacto) Sólo productos activos" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Marca" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Cantidad mínima de existencias" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(exacto) Digital frente a físico" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Permitido:** uuid, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Recuperar un solo producto (vista detallada)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "UUID o babosa del producto" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Crear un producto" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Reescribir un producto existente conservando los campos no editables" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Actualizar algunos campos de un producto existente, conservando los campos " -"no editables" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Eliminar un producto" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "enumera todas las opiniones permitidas sobre un producto" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Enumerar todas las direcciones" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Recuperar una única dirección" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Crear una nueva dirección" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Borrar una dirección" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Actualizar una dirección completa" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Actualizar parcialmente una dirección" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Autocompletar direcciones" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Cadena de consulta de datos sin procesar, adjunte los datos del punto final " -"geo-IP" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "limita la cantidad de resultados, 1 < límite < 10, por defecto: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "lista de todas las reacciones (vista simple)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "recuperar una sola respuesta (vista detallada)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "crear una retroalimentación" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "eliminar un comentario" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "reescribir una respuesta existente guardando los no editables" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Reescribir algunos campos de una categoría existente guardando los no " -"editables" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "listar todas las relaciones pedido-producto (vista simple)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "recuperar una única relación pedido-producto (vista detallada)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "crear una nueva relación pedido-producto" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "sustituir una relación pedido-producto existente" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "actualizar parcialmente una relación pedido-producto existente" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "suprimir una relación pedido-producto" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "añadir o eliminar comentarios en una relación pedido-producto" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "No se proporciona ningún término de búsqueda." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Nombre" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Categorías" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Categorías Babosas" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Etiquetas" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Precio mínimo" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Precio máximo" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Está activo" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Marca" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Atributos" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Cantidad" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Babosa" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Es Digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Incluir subcategorías" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "Debe haber un category_uuid para usar la bandera include_subcategories" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Búsqueda (ID, nombre del producto o número de pieza)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Comprado después (inclusive)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Comprado antes (inclusive)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "Correo electrónico del usuario" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID de usuario" - -#: core/filters.py:289 -msgid "Status" -msgstr "Estado" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Identificación legible" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Padres" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Toda la categoría (tenga o no al menos 1 producto)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Nivel" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID del producto" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Clave que hay que buscar o introducir en la caché" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Datos a almacenar en caché" - -#: core/graphene/mutations.py:42 -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é" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Datos en caché" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Datos JSON camelizados de la URL solicitada" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Sólo se permiten URL que empiecen por http(s)://." - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Añadir un producto al pedido" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Pedido {order_uuid} no encontrado" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Eliminar un producto del pedido" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Eliminar todos los productos del pedido" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Comprar un pedido" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Realizar una acción en una lista de productos del pedido" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Quitar/Agregar" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "La acción debe ser \"añadir\" o \"eliminar\"." - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Añadir un producto al pedido" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Lista de deseos {wishlist_uuid} no encontrada" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Eliminar un producto del pedido" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Eliminar un producto del pedido" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Eliminar un producto del pedido" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Comprar un pedido" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Cadena de dirección original proporcionada por el usuario" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} no existe: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "El límite debe estar entre 1 y 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - funciona a las mil maravillas" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Atributos" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Atributos agrupados" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Grupos de atributos" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Categorías" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Marcas" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Categorías" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Porcentaje de recargo" - -#: core/graphene/object_types.py:129 -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." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Etiquetas para esta categoría" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Productos de esta categoría" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Vendedores" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Latitud (coordenada Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Longitud (coordenada X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Cómo" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Representa la opinión de un usuario." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Notificaciones" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Descargar url para este producto de pedido si procede" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Una lista de los productos del pedido" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Dirección de facturación" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -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" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Precio total de este pedido" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Cantidad total de productos del pedido" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "¿Están todos los productos en el pedido digital" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Pedidos" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "URL de la imagen" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Imágenes del producto" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Categoría" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Comentarios" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Marca" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Grupos de atributos" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Precio" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Cantidad" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Número de reacciones" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Productos" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Códigos promocionales" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Productos a la venta" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promociones" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Vendedor" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Producto" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Productos deseados" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Listas de deseos" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Productos con etiqueta" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Etiquetas del producto" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Categorías" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Etiquetas de las categorías" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Nombre del proyecto" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Correo electrónico de la empresa" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Nombre de la empresa" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Dirección de la empresa" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Teléfono de la empresa" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Correo electrónico del usuario anfitrión" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Importe máximo de pago" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Importe mínimo de pago" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Datos analíticos" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Datos publicitarios" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configuración" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Código de idioma" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Nombre de la lengua" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Bandera de idioma, si existe :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Obtener una lista de los idiomas admitidos" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Resultados de la búsqueda de productos" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Resultados de la búsqueda de productos" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Padre de este grupo" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Grupo de atributos padre" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Nombre del grupo de atributos" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Grupo de atributos" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Almacena las credenciales y los puntos finales necesarios para la " -"comunicación API del proveedor" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Información de autenticación" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "" -"Definir el margen de beneficio para los productos recuperados de este " -"proveedor" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Porcentaje de margen del vendedor" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Nombre de este vendedor" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Nombre del vendedor" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Identificador interno de la etiqueta del producto" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Nombre de la etiqueta" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Nombre fácil de usar para la etiqueta del producto" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Nombre de la etiqueta" - -#: core/models.py:213 -msgid "product tag" -msgstr "Etiqueta del producto" - -#: core/models.py:251 -msgid "category tag" -msgstr "etiqueta de categoría" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "etiquetas de categoría" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Cargar una imagen que represente esta categoría" - -#: core/models.py:332 -msgid "category image" -msgstr "Categoría imagen" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Definir un porcentaje de recargo para los productos de esta categoría" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Padre de esta categoría para formar una estructura jerárquica" - -#: core/models.py:347 -msgid "parent category" -msgstr "Categoría de padres" - -#: core/models.py:352 -msgid "category name" -msgstr "Nombre de la categoría" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Indique un nombre para esta categoría" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Añadir una descripción detallada para esta categoría" - -#: core/models.py:361 -msgid "category description" -msgstr "Descripción de la categoría" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "etiquetas que ayudan a describir o agrupar esta categoría" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Prioridad" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Nombre de esta marca" - -#: core/models.py:430 -msgid "brand name" -msgstr "Marca" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Cargar un logotipo que represente a esta marca" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Marca pequeña imagen" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Sube un logotipo grande que represente a esta marca" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Gran imagen de marca" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Añadir una descripción detallada de la marca" - -#: core/models.py:453 -msgid "brand description" -msgstr "Descripción de la marca" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Categorías opcionales a las que se asocia esta marca" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Categorías" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Categoría a la que pertenece este producto" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Si lo desea, puede asociar este producto a una marca" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Etiquetas que ayudan a describir o agrupar este producto" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Indica si este producto se entrega digitalmente" - -#: core/models.py:549 -msgid "is product digital" -msgstr "¿Es digital el producto?" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Proporcionar un nombre que identifique claramente el producto" - -#: core/models.py:556 -msgid "product name" -msgstr "Nombre del producto" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Añada una descripción detallada del producto" - -#: core/models.py:562 -msgid "product description" -msgstr "Descripción del producto" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Número de pieza de este producto" - -#: core/models.py:570 -msgid "part number" -msgstr "Número de pieza" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Categoría de este atributo" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Grupo de este atributo" - -#: core/models.py:690 -msgid "string" -msgstr "Cadena" - -#: core/models.py:691 -msgid "integer" -msgstr "Entero" - -#: core/models.py:692 -msgid "float" -msgstr "Flotador" - -#: core/models.py:693 -msgid "boolean" -msgstr "Booleano" - -#: core/models.py:694 -msgid "array" -msgstr "Matriz" - -#: core/models.py:695 -msgid "object" -msgstr "Objeto" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Tipo del valor del atributo" - -#: core/models.py:698 -msgid "value type" -msgstr "Tipo de valor" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Nombre de este atributo" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Nombre del atributo" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Atributo" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Atributo de este valor" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "El producto específico asociado al valor de este atributo" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Producto asociado" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "El valor específico de este atributo" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "" -"Proporcione un texto alternativo para la imagen en aras de la accesibilidad" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Texto alternativo de la imagen" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Cargar el archivo de imagen para este producto" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Imagen del producto" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Determina el orden de visualización de las imágenes" - -#: core/models.py:806 -msgid "display priority" -msgstr "Prioridad de visualización" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "El producto que representa esta imagen" - -#: core/models.py:825 -msgid "product images" -msgstr "Imágenes de productos" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Porcentaje de descuento para los productos seleccionados" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Porcentaje de descuento" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Proporcione un nombre único para esta promoción" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Nombre de la promoción" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Descripción de la promoción" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Seleccione los productos incluidos en esta promoción" - -#: core/models.py:885 -msgid "included products" -msgstr "Productos incluidos" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promoción" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "El vendedor que suministra este producto dispone de" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Proveedor asociado" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Precio final al cliente después de márgenes" - -#: core/models.py:930 -msgid "selling price" -msgstr "Precio de venta" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "El producto asociado a esta entrada en stock" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "El precio pagado al vendedor por este producto" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Precio de compra al vendedor" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Cantidad disponible del producto en stock" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Cantidad en stock" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "SKU asignada por el proveedor para identificar el producto" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU del vendedor" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Archivo digital asociado a esta acción, si procede" - -#: core/models.py:961 -msgid "digital file" -msgstr "Archivo digital" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Entradas en existencias" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Productos que el usuario ha marcado como deseados" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Usuario propietario de esta lista de deseos" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Propietario de Wishlist" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Lista de deseos" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} no existe: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documental" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentaries" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Sin resolver" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Dirección del cliente" - -#: core/models.py:1129 -msgid "address line" -msgstr "Dirección" - -#: core/models.py:1131 -msgid "street" -msgstr "Calle" - -#: core/models.py:1132 -msgid "district" -msgstr "Distrito" - -#: core/models.py:1133 -msgid "city" -msgstr "Ciudad" - -#: core/models.py:1134 -msgid "region" -msgstr "Región" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Promo code" - -#: core/models.py:1136 -msgid "country" -msgstr "País" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolocalización Punto(Longitud, Latitud)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Respuesta JSON completa del geocodificador para esta dirección" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Respuesta JSON almacenada del servicio de geocodificación" - -#: core/models.py:1159 -msgid "address" -msgstr "Dirección" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Direcciones" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Código único utilizado por un usuario para canjear un descuento" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Promo code identifier" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Se aplica un descuento fijo si no se utiliza el porcentaje" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Importe fijo del descuento" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Porcentaje de descuento aplicado si no se utiliza el importe fijo" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Porcentaje de descuento" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Fecha de caducidad del promocode" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Hora de fin de validez" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Fecha a partir de la cual es válido este promocode" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Hora de inicio de validez" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Fecha en la que se utilizó el promocode, en blanco si aún no se ha utilizado" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Marca de tiempo de uso" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Usuario asignado a este promocode si procede" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Usuario asignado" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Promo code" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Promo codes" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " -"ambos ni ninguno." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "El código promocional ya ha sido utilizado" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Tipo de descuento no válido para promocode {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "La dirección de facturación utilizada para este pedido" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Código promocional opcional aplicado a este pedido" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Código promocional aplicado" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "La dirección de envío utilizada para este pedido" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Dirección de envío" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Estado actual del pedido en su ciclo de vida" - -#: core/models.py:1349 -msgid "order status" -msgstr "Estado del pedido" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"Estructura JSON de las notificaciones para mostrar a los usuarios, en la " -"interfaz de administración se utiliza la vista de tabla." - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "Representación JSON de los atributos de la orden para esta orden" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "El usuario que realizó el pedido" - -#: core/models.py:1367 -msgid "user" -msgstr "Usuario" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Fecha de finalización de la orden" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Comprar tiempo" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Un identificador legible por el ser humano para la orden" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "ID legible por humanos" - -#: core/models.py:1388 -msgid "order" -msgstr "Pida" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Un usuario sólo puede tener una orden pendiente a la vez." - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "No puede añadir productos a un pedido que no esté pendiente" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "No se pueden añadir productos inactivos al pedido" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "No puede añadir más productos de los disponibles en stock" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "No puede eliminar productos de un pedido que no esté pendiente" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} no existe con la consulta <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Promocode no existe" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" -"Sólo puede comprar productos físicos con la dirección de envío especificada." - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "La dirección no existe" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"No puede comprar en este momento, por favor inténtelo de nuevo en unos " -"minutos." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Valor de fuerza no válido" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "No se puede comprar un pedido vacío." - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Fondos insuficientes para completar el pedido" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"no puede comprar sin registrarse, facilite la siguiente información: nombre " -"del cliente, correo electrónico del cliente, número de teléfono del cliente" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Forma de pago no válida: ¡{payment_method} de {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "" -"El precio pagado por el cliente por este producto en el momento de la compra" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Precio de compra en el momento del pedido" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "" -"Comentarios internos para los administradores sobre este producto solicitado" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Comentarios internos" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Notificaciones a los usuarios" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "Representación JSON de los atributos de este elemento" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Atributos ordenados del producto" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Referencia al pedido principal que contiene este producto" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Orden de los padres" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "El producto específico asociado a esta línea de pedido" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Cantidad de este producto específico en el pedido" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Cantidad de productos" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Estado actual de este producto en el pedido" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Estado de la línea de productos" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "acción incorrecta especificada para la retroalimentación: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "no se puede comentar un pedido no recibido" - -#: core/models.py:1882 -msgid "download" -msgstr "Descargar" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Descargas" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "No puede descargar un activo digital para un pedido no finalizado" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Comentarios de los usuarios sobre su experiencia con el producto" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Comentarios" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Hace referencia al producto específico de un pedido sobre el que trata esta " -"opinión" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Producto relacionado con el pedido" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Valoración del producto asignada por el usuario" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Valoración del producto" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Comentarios" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"debe proporcionar un comentario, una valoración y el uuid del producto " -"solicitado para añadir comentarios." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Error durante la creación del promocode: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Confirmación de pedido" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logotipo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hola %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"¡Gracias por su pedido #%(order.pk)s! Nos complace informarle de que hemos " -"recibido su pedido. A continuación encontrará los detalles de su pedido:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Total" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Precio total" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro " -"servicio de asistencia en %(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Saludos cordiales,
el equipo de %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Todos los derechos reservados" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Pedido entregado" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Hola %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"¡Hemos procesado correctamente su pedido №%(order_uuid)s! A continuación " -"encontrará los detalles de su pedido:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"información adicional\n" -" información adicional" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Valor" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -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 %(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Saludos cordiales,
el equipo de %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Clave" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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 " -"encontrará los detalles de su pedido:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Precio del envío" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Su pedido se entregará en la siguiente dirección:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Saludos cordiales,
el equipo de %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"todos los derechos\n" -" reservados" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Tanto los datos como el tiempo de espera son necesarios" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "" -"Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos." - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} debe ser modelo" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} debe ser un objeto de lista" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Contacto iniciado" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmación de pedido" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Pedido entregado" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "No tiene permiso para realizar esta acción." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "El parámetro NOMINATIM_URL debe estar configurado." - -#: core/validators.py:16 -#, python-brace-format -msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" -"Las dimensiones de la imagen no deben superar w{max_width} x h{max_height} " -"píxeles." - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Formato de número de teléfono no válido" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Sólo puede descargar el activo digital una vez" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon no encontrado" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Error de geocodificación: {e}" diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo deleted file mode 100644 index 7efaee64..00000000 Binary files a/core/locale/fr_FR/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/fr_FR/LC_MESSAGES/django.po b/core/locale/fr_FR/LC_MESSAGES/django.po deleted file mode 100644 index a9a3ee62..00000000 --- a/core/locale/fr_FR/LC_MESSAGES/django.po +++ /dev/null @@ -1,2358 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: fr-fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Unique ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"L'identifiant unique est utilisé pour identifier de manière sûre tout objet " -"de la base de données." - -#: core/abstract.py:20 -msgid "is active" -msgstr "Est actif" - -#: core/abstract.py:21 -msgid "" -"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." - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Créée" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Date de la première apparition de l'objet dans la base de données" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modifié" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Date de la dernière modification de l'objet" - -#: core/admin.py:55 -msgid "translations" -msgstr "Traductions" - -#: core/admin.py:59 -msgid "general" -msgstr "Général" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relations" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Métadonnées" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Horodatage" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Activer les %(verbose_name_plural)s sélectionnés" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s activé avec succès !" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Désactiver les %(verbose_name_plural)s sélectionnés" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "Désactivation réussie de %(verbose_name_plural)s." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Valeur de l'attribut" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Valeurs des attributs" - -#: core/admin.py:124 -msgid "image" -msgstr "Image" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Images" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stock" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Stocks" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Commander un produit" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Commander des produits" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Les enfants" - -#: core/admin.py:471 -msgid "Config" -msgstr "Config" - -#: core/apps.py:8 -msgid "core" -msgstr "Cœur de métier" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Fini" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Délivrer" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Livré" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Annulé" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Échec" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "En attente" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Accepté" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Argent restitué" - -#: core/choices.py:17 -msgid "payment" -msgstr "Paiement" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Réussite" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Cache I/O" - -#: core/docs/drf/views.py:19 -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." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Obtenir la liste des langues prises en charge" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Obtenir les paramètres exposables de l'application" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Envoyer un message à l'équipe d'assistance" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Demander une URL CORSée. Seul https est autorisé." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" -"Point d'arrivée de la recherche globale pour interroger les tables du projet" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Acheter une commande en tant qu'entreprise" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Acheter une commande en tant qu'entreprise, en utilisant les `produits` " -"fournis avec `product_uuid` et `attributs`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Liste de tous les groupes d'attributs (vue simple)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Récupérer un seul groupe d'attributs (vue détaillée)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Créer un groupe d'attributs" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Supprimer un groupe d'attributs" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Réécrire un groupe d'attributs existant en sauvegardant les éléments non " -"modifiables" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Liste de tous les attributs (vue simple)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Récupérer un seul attribut (vue détaillée)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Créer un attribut" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Supprimer un attribut" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "" -"Réécrire un attribut existant en sauvegardant les éléments non modifiables" - -#: core/docs/drf/viewsets.py:90 -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" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Liste de toutes les valeurs d'attributs (vue simple)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Récupérer une seule valeur d'attribut (vue détaillée)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Créer une valeur d'attribut" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Supprimer une valeur d'attribut" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Réécrire une valeur d'attribut existante en sauvegardant les éléments non " -"modifiables" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Liste de toutes les catégories (vue simple)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Récupérer une seule catégorie (vue détaillée)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Créer une catégorie" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Supprimer une catégorie" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" -"éditables" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Liste de toutes les catégories (vue simple)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Pour les utilisateurs non fonctionnaires, seules leurs propres commandes " -"sont renvoyées." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtrer les commandes dont l'heure d'achat est >= cette date ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtrer les commandes avec buy_time <= this ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtre sur l'UUID exact de l'ordre" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtre sur l'identifiant exact de la commande, lisible par l'homme" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filtre sur l'adresse électronique de l'utilisateur (correspondance exacte " -"insensible à la casse)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrer par UUID de l'utilisateur" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Filtre sur l'état de la commande (correspondance insensible aux majuscules " -"et aux minuscules)" - -#: core/docs/drf/viewsets.py:201 -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')." -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')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Récupérer une seule catégorie (vue détaillée)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Créer un attribut" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Supprimer un attribut" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" -"éditables" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Prix d'achat au moment de la commande" - -#: core/docs/drf/viewsets.py:233 -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 "" -"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." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "acheter une commande sans créer de compte" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finalise l'achat d'une commande pour un utilisateur non enregistré." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Ajouter un produit à la commande" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Ajoute un produit à une commande en utilisant le `product_uuid` et les " -"`attributs` fournis." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "" -"Ajouter une liste de produits à la commande, les quantités ne seront pas " -"prises en compte" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Ajoute une liste de produits à une commande en utilisant le `product_uuid` " -"et les `attributs` fournis." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Supprimer un produit de la commande" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Supprime un produit d'une commande en utilisant le `product_uuid` et les " -"`attributs` fournis." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "" -"Retirer un produit de la commande, les quantités ne seront pas prises en " -"compte" - -#: core/docs/drf/viewsets.py:273 -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." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Liste de tous les attributs (vue simple)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Pour les utilisateurs non fonctionnaires, seules leurs propres listes de " -"souhaits sont renvoyées." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Récupérer un seul attribut (vue détaillée)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Créer un attribut" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Supprimer un attribut" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "" -"Réécrire un attribut existant en sauvegardant les éléments non modifiables" - -#: core/docs/drf/viewsets.py:303 -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" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Ajouter un produit à la commande" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Ajoute un produit à une liste de souhaits en utilisant le `product_uuid` " -"fourni" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Supprimer un produit de la liste de souhaits" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Supprime un produit d'une liste de souhaits en utilisant l'identifiant " -"`product_uuid` fourni." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Ajouter plusieurs produits à la liste de souhaits" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Ajoute plusieurs produits à une liste de souhaits en utilisant les " -"`product_uuids` fournis" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Supprimer un produit de la commande" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Supprime plusieurs produits d'une liste de souhaits en utilisant les " -"`product_uuids` fournis" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Exemples : \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Liste de tous les produits (vue simple)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "UUID (exact) du produit" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Nom du produit" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(liste) Noms de catégories, insensibles à la casse" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "UUID (exact) de la catégorie" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(liste) Noms d'étiquettes, insensibles à la casse" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Prix minimum de l'action" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Prix maximum de l'action" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(exact) Uniquement les produits actifs" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Nom de marque" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Quantité minimale en stock" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Numérique ou physique" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Allowed:** uuid, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Récupérer un seul produit (vue détaillée)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "UUID ou Slug du produit" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Créer un produit" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Réécrire un produit existant en préservant les champs non modifiables" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Mettre à jour certains champs d'un produit existant, en préservant les " -"champs non modifiables" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Supprimer un produit" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "liste tous les commentaires autorisés pour un produit" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Liste de toutes les adresses" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Récupérer une seule adresse" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Créer une nouvelle adresse" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Supprimer une adresse" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Mise à jour d'une adresse entière" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Mise à jour partielle d'une adresse" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Saisie automatique des adresses" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Chaîne de requête de données brutes, à compléter avec les données du point " -"d'extrémité géo-IP" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "limite la quantité de résultats, 1 < limite < 10, par défaut : 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "liste de tous les commentaires (vue simple)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "récupérer un seul retour d'information (vue détaillée)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "créer un retour d'information" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "supprimer un feedback" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" -"réécrire un feedback existant en sauvegardant les éléments non modifiables" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" -"éditables" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "lister toutes les relations commande-produit (vue simple)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "récupérer une seule relation commande-produit (vue détaillée)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "créer une nouvelle relation commande-produit" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "remplacer une relation commande-produit existante" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "mettre à jour partiellement une relation commande-produit existante" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "supprimer une relation commande-produit" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "" -"ajouter ou supprimer un retour d'information sur une relation commande-" -"produit" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Aucun terme de recherche n'est fourni." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Nom" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Catégories" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Catégories Limaces" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tags" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Prix minimum" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Prix maximum" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Est actif" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Marque" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Attributs" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Quantité" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Limace" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Is Digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Inclure des sous-catégories" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Il doit y avoir un category_uuid pour utiliser le drapeau " -"include_subcategories" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Recherche (ID, nom du produit ou numéro de pièce)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Acheté après (inclus)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Acheté avant (inclus)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "Courriel de l'utilisateur" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID de l'utilisateur" - -#: core/filters.py:289 -msgid "Status" -msgstr "Statut" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "ID lisible par l'homme" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Parent" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Catégorie entière (avec au moins 1 produit ou non)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Niveau" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID du produit" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Clé à rechercher ou à insérer dans la cache" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Données à stocker dans la mémoire cache" - -#: core/graphene/mutations.py:42 -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" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Données mises en cache" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Données JSON camélisées provenant de l'URL demandée" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Seuls les URL commençant par http(s):// sont autorisés." - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Ajouter un produit à la commande" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "L'ordre {order_uuid} n'a pas été trouvé" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Supprimer un produit de la commande" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Supprimer tous les produits de la commande" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Acheter une commande" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -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 !" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -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}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Effectuer une action sur une liste de produits dans la commande" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Supprimer/Ajouter" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "L'action doit être soit \"ajouter\", soit \"supprimer\" !" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Ajouter un produit à la commande" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Wishlist {wishlist_uuid} introuvable" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Supprimer un produit de la commande" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Supprimer un produit de la commande" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Supprimer un produit de la commande" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Acheter une commande" - -#: core/graphene/mutations.py:456 -msgid "" -"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." - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Chaîne d'adresse originale fournie par l'utilisateur" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} n'existe pas : {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "La limite doit être comprise entre 1 et 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - fonctionne comme un charme" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Attributs" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Attributs groupés" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Groupes d'attributs" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Catégories" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Marques" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Catégories" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Markup Percentage" - -#: core/graphene/object_types.py:129 -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." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tags pour cette catégorie" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Produits dans cette catégorie" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Vendeurs" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Latitude (coordonnée Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Longitude (coordonnée X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Comment" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Représente le retour d'information d'un utilisateur." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Notifications" - -#: core/graphene/object_types.py:275 -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" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Une liste des produits commandés dans cette commande" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Adresse de facturation" - -#: core/graphene/object_types.py:309 -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" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Prix total de la commande" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Quantité totale de produits dans la commande" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Tous les produits de la commande sont-ils numériques ?" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Commandes" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Image URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Images du produit" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Catégorie" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Retour d'information" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Marque" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Groupes d'attributs" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Prix" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Quantité" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Nombre de retours d'information" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Produits" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Promocodes" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Produits en vente" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promotions" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Vendeur" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Produit" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Produits en liste de souhaits" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Liste de souhaits" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Produits marqués" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Étiquettes du produit" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Catégories marquées" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Tags des catégories" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Nom du projet" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Courriel de l'entreprise" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Nom de l'entreprise" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Adresse de l'entreprise" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Numéro de téléphone de l'entreprise" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Utilisateur de l'hôte de messagerie" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Montant maximum du paiement" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Montant minimum pour le paiement" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Données analytiques" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Advertisement data" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configuration" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Code langue" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Nom de la langue" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Drapeau linguistique, s'il existe :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Obtenir la liste des langues prises en charge" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Résultats de la recherche de produits" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Résultats de la recherche de produits" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Parent de ce groupe" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Groupe d'attributs parent" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Nom du groupe d'attributs" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Groupe d'attributs" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Stocke les informations d'identification et les points d'extrémité " -"nécessaires à la communication avec l'API du fournisseur." - -#: core/models.py:148 -msgid "authentication info" -msgstr "Informations sur l'authentification" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "" -"Définir la majoration pour les produits récupérés auprès de ce fournisseur" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Pourcentage de marge du vendeur" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Nom de ce vendeur" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Nom du vendeur" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Identifiant interne de l'étiquette du produit" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Nom du jour" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Nom convivial pour l'étiquette du produit" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Nom d'affichage de l'étiquette" - -#: core/models.py:213 -msgid "product tag" -msgstr "Étiquette du produit" - -#: core/models.py:251 -msgid "category tag" -msgstr "étiquette de catégorie" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "balises de catégorie" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Télécharger une image représentant cette catégorie" - -#: core/models.py:332 -msgid "category image" -msgstr "Image de catégorie" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "" -"Définir un pourcentage de majoration pour les produits de cette catégorie" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Parent de cette catégorie pour former une structure hiérarchique" - -#: core/models.py:347 -msgid "parent category" -msgstr "Catégorie de parents" - -#: core/models.py:352 -msgid "category name" -msgstr "Nom de la catégorie" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Donnez un nom à cette catégorie" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Ajouter une description détaillée pour cette catégorie" - -#: core/models.py:361 -msgid "category description" -msgstr "Description de la catégorie" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Priorité" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Nom de cette marque" - -#: core/models.py:430 -msgid "brand name" -msgstr "Nom de marque" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Télécharger un logo représentant cette marque" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Petite image de marque" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Télécharger un grand logo représentant cette marque" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Une grande image de marque" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Ajouter une description détaillée de la marque" - -#: core/models.py:453 -msgid "brand description" -msgstr "Description de la marque" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Catégories facultatives auxquelles cette marque est associée" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Catégories" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Catégorie à laquelle appartient ce produit" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Possibilité d'associer ce produit à une marque" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Indique si ce produit est livré numériquement" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Le produit est-il numérique ?" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Fournir un nom d'identification clair pour le produit" - -#: core/models.py:556 -msgid "product name" -msgstr "Nom du produit" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Ajouter une description détaillée du produit" - -#: core/models.py:562 -msgid "product description" -msgstr "Description du produit" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Numéro de pièce pour ce produit" - -#: core/models.py:570 -msgid "part number" -msgstr "Numéro de pièce" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Catégorie de cet attribut" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Groupe de cet attribut" - -#: core/models.py:690 -msgid "string" -msgstr "Chaîne" - -#: core/models.py:691 -msgid "integer" -msgstr "Entier" - -#: core/models.py:692 -msgid "float" -msgstr "Flotteur" - -#: core/models.py:693 -msgid "boolean" -msgstr "Booléen" - -#: core/models.py:694 -msgid "array" -msgstr "Tableau" - -#: core/models.py:695 -msgid "object" -msgstr "Objet" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Type de la valeur de l'attribut" - -#: core/models.py:698 -msgid "value type" -msgstr "Type de valeur" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Nom de cet attribut" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Nom de l'attribut" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Attribut" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Attribut de cette valeur" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Le produit spécifique associé à la valeur de cet attribut" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Produit associé" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "La valeur spécifique de cet attribut" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Fournir un texte alternatif pour l'image afin d'en faciliter l'accès" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Texte alt de l'image" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Télécharger le fichier image pour ce produit" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Image du produit" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Détermine l'ordre d'affichage des images" - -#: core/models.py:806 -msgid "display priority" -msgstr "Priorité à l'affichage" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Le produit que cette image représente" - -#: core/models.py:825 -msgid "product images" -msgstr "Images du produit" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Pourcentage de réduction pour les produits sélectionnés" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Pourcentage de réduction" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Donnez un nom unique à cette promotion" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Nom de la promotion" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Promotion description" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Sélectionnez les produits inclus dans cette promotion" - -#: core/models.py:885 -msgid "included products" -msgstr "Produits inclus" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promotion" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Le vendeur qui fournit ce stock de produits" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Vendeur associé" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Prix final pour le client après majoration" - -#: core/models.py:930 -msgid "selling price" -msgstr "Prix de vente" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Le produit associé à cette entrée de stock" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Le prix payé au vendeur pour ce produit" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Prix d'achat du vendeur" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Quantité disponible du produit en stock" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Quantité en stock" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "SKU attribué par le fournisseur pour identifier le produit" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "UGS du vendeur" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Fichier numérique associé à ce stock, le cas échéant" - -#: core/models.py:961 -msgid "digital file" -msgstr "Fichier numérique" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Entrées de stock" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Produits que l'utilisateur a marqués comme souhaités" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Utilisateur qui possède cette liste de souhaits" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Propriétaire de la liste de souhaits" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Liste de souhaits" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} n'existe pas : {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documentaire" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentaires" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Non résolu" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Ligne d'adresse du client" - -#: core/models.py:1129 -msgid "address line" -msgstr "Ligne d'adresse" - -#: core/models.py:1131 -msgid "street" -msgstr "Rue" - -#: core/models.py:1132 -msgid "district" -msgstr "District" - -#: core/models.py:1133 -msgid "city" -msgstr "Ville" - -#: core/models.py:1134 -msgid "region" -msgstr "Région" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Code postal" - -#: core/models.py:1136 -msgid "country" -msgstr "Pays" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Point de géolocalisation (longitude, latitude)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Réponse JSON complète du géocodeur pour cette adresse" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Réponse JSON stockée du service de géocodage" - -#: core/models.py:1159 -msgid "address" -msgstr "Adresse" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adresses" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Code unique utilisé par un utilisateur pour bénéficier d'une réduction" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Identifiant du code promotionnel" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Montant de l'escompte fixe" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Pourcentage de réduction" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Date d'expiration du code promotionnel" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Heure de fin de validité" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Date à partir de laquelle ce code promotionnel est valable" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Heure de début de validité" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Date à laquelle le code promotionnel a été utilisé, vide s'il n'a pas encore " -"été utilisé." - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Horodatage de l'utilisation" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Utilisateur assigné à ce code promo, le cas échéant" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Utilisateur assigné" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Code promo" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Codes promotionnels" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Un seul type de remise doit être défini (montant ou pourcentage), mais pas " -"les deux ni aucun des deux." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Le code promotionnel a déjà été utilisé" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Type de réduction non valide pour le code promo {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "L'adresse de facturation utilisée pour cette commande" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Code promo optionnel appliqué à cette commande" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Code promo appliqué" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "L'adresse de livraison utilisée pour cette commande" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Adresse de livraison" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Statut actuel de la commande dans son cycle de vie" - -#: core/models.py:1349 -msgid "order status" -msgstr "Statut de la commande" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"Structure JSON des notifications à afficher aux utilisateurs ; dans " -"l'interface d'administration, la vue en tableau est utilisée." - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "Représentation JSON des attributs de cette commande" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "L'utilisateur qui a passé la commande" - -#: core/models.py:1367 -msgid "user" -msgstr "Utilisateur" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "L'heure à laquelle la commande a été finalisée." - -#: core/models.py:1374 -msgid "buy time" -msgstr "Temps d'achat" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Un identifiant lisible par l'homme pour la commande" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "ID lisible par l'homme" - -#: core/models.py:1388 -msgid "order" -msgstr "Commande" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Un utilisateur ne peut avoir qu'un seul ordre en cours à la fois !" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "" -"Vous ne pouvez pas ajouter de produits à une commande qui n'est pas en cours." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "" -"Vous ne pouvez pas ajouter plus de produits que ceux disponibles en stock" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" -"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " -"cours." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} n'existe pas avec la requête <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Le code promotionnel n'existe pas" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" -"Vous ne pouvez acheter que des produits physiques dont l'adresse de " -"livraison est spécifiée !" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "L'adresse n'existe pas" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"Vous ne pouvez pas acheter en ce moment, veuillez réessayer dans quelques " -"minutes." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Valeur de force non valide" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Vous ne pouvez pas acheter une commande vide !" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Insuffisance de fonds pour compléter la commande" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"vous ne pouvez pas acheter sans vous inscrire, veuillez fournir les " -"informations suivantes : nom du client, courriel du client, numéro de " -"téléphone du client" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Méthode de paiement non valide : {payment_method} de " -"{available_payment_methods} !" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "Le prix payé par le client pour ce produit au moment de l'achat" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Prix d'achat au moment de la commande" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Commentaires internes pour les administrateurs sur ce produit commandé" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Commentaires internes" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Notifications aux utilisateurs" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "Représentation JSON des attributs de cet élément" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Attributs du produit ordonnés" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Référence à l'ordre parent qui contient ce produit" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Ordonnance parentale" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Le produit spécifique associé à cette ligne de commande" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Quantité de ce produit spécifique dans la commande" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Quantité de produits" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Statut actuel de ce produit dans la commande" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Statut de la ligne de produits" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "mauvaise action spécifiée pour le retour d'information : {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" -"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " -"cours." - -#: core/models.py:1882 -msgid "download" -msgstr "Télécharger" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Téléchargements" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Vous ne pouvez pas télécharger un bien numérique pour une commande non " -"terminée." - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Commentaires des utilisateurs sur leur expérience du produit" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Commentaires" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Fait référence au produit spécifique d'une commande sur lequel porte le " -"retour d'information." - -#: core/models.py:1930 -msgid "related order product" -msgstr "Produit de commande apparenté" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Note attribuée par l'utilisateur au produit" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Evaluation du produit" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Retour d'information" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"vous devez fournir un commentaire, une note et l'uuid du produit commandé " -"pour ajouter un commentaire." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Erreur lors de la création du promocode : {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Confirmation de commande" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Bonjour %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Merci pour votre commande #%(order.pk)s ! Nous avons le plaisir de vous " -"informer que nous avons pris en compte votre commande. Vous trouverez ci-" -"dessous les détails de votre commande :" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Total" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Prix total" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Si vous avez des questions, n'hésitez pas à contacter notre support à " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Meilleures salutations,
l'équipe de %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Tous droits réservés" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Commande livrée" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Bonjour %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Nous avons traité avec succès votre commande №%(order_uuid)s ! Vous " -"trouverez ci-dessous les détails de votre commande :" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"informations\n" -" complémentaires" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Valeur" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -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 à %(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Meilleures salutations,
l'équipe de %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Clé" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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 " -"confirmer votre achat. Vous trouverez ci-dessous les détails de votre " -"commande :" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Prix d'expédition" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Votre commande sera livrée à l'adresse suivante :" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Meilleures salutations,
l'équipe de %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"tous les droits\n" -" réservés" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Les données et le délai d'attente sont tous deux nécessaires" - -#: core/utils/caching.py:43 -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." - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} doit être le modèle" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} doit être un objet de liste" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Nous contacter initié" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmation de commande" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Commande livrée" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "Vous n'êtes pas autorisé à effectuer cette action." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Le paramètre NOMINATIM_URL doit être configuré !" - -#: core/validators.py:16 -#, python-brace-format -msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" -"Les dimensions de l'image ne doivent pas dépasser w{max_width} x " -"h{max_height} pixels." - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Format de numéro de téléphone non valide" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon introuvable" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Erreur de géocodage : {e}" diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po deleted file mode 100644 index 845780f1..00000000 --- a/core/locale/hi_IN/LC_MESSAGES/django.po +++ /dev/null @@ -1,2204 +0,0 @@ -# EVIBES GETTEXT TRANSLATIONS -# 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 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" - -#: core/abstract.py:20 -msgid "is active" -msgstr "" - -#: core/abstract.py:21 -msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "" - -#: core/abstract.py:27 -msgid "modified" -msgstr "" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "" - -#: core/admin.py:55 -msgid "translations" -msgstr "" - -#: core/admin.py:59 -msgid "general" -msgstr "" - -#: core/admin.py:61 -msgid "relations" -msgstr "" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "" - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "" - -#: core/admin.py:124 -msgid "image" -msgstr "" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "" - -#: core/admin.py:471 -msgid "Config" -msgstr "" - -#: core/apps.py:8 -msgid "core" -msgstr "" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "" - -#: core/choices.py:6 -msgid "delivered" -msgstr "" - -#: core/choices.py:7 -msgid "canceled" -msgstr "" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "" - -#: core/choices.py:10 -msgid "accepted" -msgstr "" - -#: core/choices.py:11 -msgid "money returned" -msgstr "" - -#: core/choices.py:17 -msgid "payment" -msgstr "" - -#: core/choices.py:21 -msgid "momental" -msgstr "" - -#: core/choices.py:24 -msgid "successful" -msgstr "" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "" - -#: core/docs/drf/views.py:19 -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 "" - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "" - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" - -#: core/docs/drf/viewsets.py:158 -msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" -msgstr "" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "" - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "" - -#: core/docs/drf/viewsets.py:233 -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 "" - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "" - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "" - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`b64-description=icontains-aGVhdC1jb2xk`" -msgstr "" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" -"**Allowed:** uuid, rating, name, slug, created, modified, price, random" -msgstr "" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "" - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "" - -#: core/filters.py:70 -msgid "Brand" -msgstr "" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "" - -#: core/filters.py:289 -msgid "Status" -msgstr "" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "" - -#: core/filters.py:354 -msgid "Parent" -msgstr "" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "" - -#: core/filters.py:362 -msgid "Level" -msgstr "" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "" - -#: core/graphene/mutations.py:456 -msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "" - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "" - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "" - -#: core/graphene/object_types.py:262 -msgid "rating value from 1 to 10, inclusive, or 0 if not set." -msgstr "" - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "" - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "" - -#: core/graphene/object_types.py:506 -msgid "email from, sometimes it must be used instead of host user value" -msgstr "" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" - -#: core/models.py:148 -msgid "authentication info" -msgstr "" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "" - -#: core/models.py:159 -msgid "vendor name" -msgstr "" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "" - -#: core/models.py:213 -msgid "product tag" -msgstr "" - -#: core/models.py:251 -msgid "category tag" -msgstr "" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "" - -#: core/models.py:332 -msgid "category image" -msgstr "" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "" - -#: core/models.py:347 -msgid "parent category" -msgstr "" - -#: core/models.py:352 -msgid "category name" -msgstr "" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "" - -#: core/models.py:361 -msgid "category description" -msgstr "" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "" - -#: core/models.py:430 -msgid "brand name" -msgstr "" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "" - -#: core/models.py:439 -msgid "brand small image" -msgstr "" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "" - -#: core/models.py:447 -msgid "brand big image" -msgstr "" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "" - -#: core/models.py:453 -msgid "brand description" -msgstr "" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "" - -#: core/models.py:459 -msgid "associated categories" -msgstr "" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "" - -#: core/models.py:549 -msgid "is product digital" -msgstr "" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "" - -#: core/models.py:556 -msgid "product name" -msgstr "" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "" - -#: core/models.py:562 -msgid "product description" -msgstr "" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "" - -#: core/models.py:570 -msgid "part number" -msgstr "" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "" - -#: core/models.py:690 -msgid "string" -msgstr "" - -#: core/models.py:691 -msgid "integer" -msgstr "" - -#: core/models.py:692 -msgid "float" -msgstr "" - -#: core/models.py:693 -msgid "boolean" -msgstr "" - -#: core/models.py:694 -msgid "array" -msgstr "" - -#: core/models.py:695 -msgid "object" -msgstr "" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "" - -#: core/models.py:698 -msgid "value type" -msgstr "" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "" - -#: core/models.py:795 -msgid "image alt text" -msgstr "" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "" - -#: core/models.py:806 -msgid "display priority" -msgstr "" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "" - -#: core/models.py:825 -msgid "product images" -msgstr "" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "" - -#: core/models.py:873 -msgid "promotion name" -msgstr "" - -#: core/models.py:879 -msgid "promotion description" -msgstr "" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "" - -#: core/models.py:885 -msgid "included products" -msgstr "" - -#: core/models.py:889 -msgid "promotion" -msgstr "" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "" - -#: core/models.py:930 -msgid "selling price" -msgstr "" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "" - -#: core/models.py:961 -msgid "digital file" -msgstr "" - -#: core/models.py:970 -msgid "stock entries" -msgstr "" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "" - -#: core/models.py:1071 -msgid "documentary" -msgstr "" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "" - -#: core/models.py:1129 -msgid "address line" -msgstr "" - -#: core/models.py:1131 -msgid "street" -msgstr "" - -#: core/models.py:1132 -msgid "district" -msgstr "" - -#: core/models.py:1133 -msgid "city" -msgstr "" - -#: core/models.py:1134 -msgid "region" -msgstr "" - -#: core/models.py:1135 -msgid "postal code" -msgstr "" - -#: core/models.py:1136 -msgid "country" -msgstr "" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "" - -#: core/models.py:1159 -msgid "address" -msgstr "" - -#: core/models.py:1160 -msgid "addresses" -msgstr "" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "" - -#: core/models.py:1252 -msgid "promo code" -msgstr "" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "" - -#: core/models.py:1349 -msgid "order status" -msgstr "" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "" - -#: core/models.py:1367 -msgid "user" -msgstr "" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "" - -#: core/models.py:1374 -msgid "buy time" -msgstr "" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "" - -#: core/models.py:1388 -msgid "order" -msgstr "" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "" - -#: core/models.py:1758 -msgid "parent order" -msgstr "" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "" - -#: core/models.py:1783 -msgid "product line status" -msgstr "" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" - -#: core/models.py:1882 -msgid "download" -msgstr "" - -#: core/models.py:1883 -msgid "downloads" -msgstr "" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" - -#: core/models.py:1930 -msgid "related order product" -msgstr "" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "" - -#: core/models.py:1936 -msgid "product rating" -msgstr "" - -#: core/models.py:1944 -msgid "feedback" -msgstr "" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "" - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "" - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" -" the details of your order:" -msgstr "" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "" - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "" - -#: core/validators.py:16 -#, python-brace-format -msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "" diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo deleted file mode 100644 index ee9a0fc6..00000000 Binary files a/core/locale/it_IT/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/it_IT/LC_MESSAGES/django.po b/core/locale/it_IT/LC_MESSAGES/django.po deleted file mode 100644 index bf2a393d..00000000 --- a/core/locale/it_IT/LC_MESSAGES/django.po +++ /dev/null @@ -1,2340 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: it-it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "ID univoco" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"L'ID univoco viene utilizzato per identificare con certezza qualsiasi " -"oggetto del database." - -#: core/abstract.py:20 -msgid "is active" -msgstr "È attivo" - -#: core/abstract.py:21 -msgid "" -"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." - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Creato" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Quando l'oggetto è apparso per la prima volta nel database" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modificato" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Quando l'oggetto è stato modificato per l'ultima volta" - -#: core/admin.py:55 -msgid "translations" -msgstr "Traduzioni" - -#: core/admin.py:59 -msgid "general" -msgstr "Generale" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relazioni" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadati" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Timestamp" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Attivare il %(verbose_name_plural)s selezionato" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s attivato con successo!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Disattivare il %(verbose_name_plural)s selezionato" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s disattivato con successo." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Valore dell'attributo" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Valori degli attributi" - -#: core/admin.py:124 -msgid "image" -msgstr "Immagine" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Immagini" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stock" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Le scorte" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Ordina il prodotto" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Ordinare i prodotti" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "I bambini" - -#: core/admin.py:471 -msgid "Config" -msgstr "Configurazione" - -#: core/apps.py:8 -msgid "core" -msgstr "Nucleo" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Finito" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Consegnare" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Consegnato" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Annullato" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Fallito" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "In attesa" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Accettato" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Denaro restituito" - -#: core/choices.py:17 -msgid "payment" -msgstr "Pagamento" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momentale" - -#: core/choices.py:24 -msgid "successful" -msgstr "Successo" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "I/O della cache" - -#: core/docs/drf/views.py:19 -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 "" -"Applicare solo una chiave per leggere i dati consentiti dalla cache.\n" -"Applicare chiave, dati e timeout con autenticazione per scrivere dati nella " -"cache." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Ottenere un elenco delle lingue supportate" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Ottenere i parametri esponibili dell'applicazione" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Inviate un messaggio al team di assistenza" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Richiedere un URL CORSed. È consentito solo https." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" -"Endpoint di ricerca globale per interrogare tutte le tabelle del progetto" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Acquistare un ordine come azienda" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Acquistare un ordine come azienda, utilizzando i `prodotti` forniti con " -"`product_uuid` e `attributi`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Elenco di tutti i gruppi di attributi (vista semplice)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Recuperare un singolo gruppo di attributi (vista dettagliata)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Creare un gruppo di attributi" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Cancellare un gruppo di attributi" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Riscrivere un gruppo di attributi esistente salvando i non modificabili" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Elenco di tutti gli attributi (vista semplice)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Recuperare un singolo attributo (vista dettagliata)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Creare un attributo" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Cancellare un attributo" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "" -"Riscrivere un attributo esistente salvando gli elementi non modificabili" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Riscrivere alcuni campi di un attributo esistente salvando i campi non " -"modificabili" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Elenco di tutti i valori degli attributi (vista semplice)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Recuperare il valore di un singolo attributo (vista dettagliata)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Creare un valore di attributo" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Cancellare il valore di un attributo" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Riscrivere il valore di un attributo esistente salvando gli elementi non " -"modificabili" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Elenco di tutte le categorie (visualizzazione semplice)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Recuperare una singola categoria (vista dettagliata)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Creare una categoria" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Eliminare una categoria" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "" -"Riscrivere una categoria esistente salvando gli elementi non modificabili" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Elenco di tutte le categorie (visualizzazione semplice)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Per gli utenti che non fanno parte del personale, vengono restituiti solo i " -"loro ordini." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtra gli ordini con buy_time >= questa data ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtra gli ordini con buy_time <= questa data ISO 8601" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtrare per UUID dell'ordine esatto" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtrare in base all'ID esatto dell'ordine leggibile dall'uomo" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filtro per e-mail dell'utente (corrispondenza esatta senza distinzione tra " -"maiuscole e minuscole)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrare per UUID dell'utente" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Filtrare per stato dell'ordine (corrispondenza di sottostringhe senza " -"distinzione tra maiuscole e minuscole)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"Ordinare per uno dei seguenti criteri: uuid, human_readable_id, user_email, " -"user, status, created, modified, buy_time, random. Prefisso con '-' per la " -"decrescita (ad esempio, '-buy_time')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Recuperare una singola categoria (vista dettagliata)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Creare un attributo" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Non funziona per gli utenti che non fanno parte del personale." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Cancellare un attributo" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "" -"Riscrivere una categoria esistente salvando gli elementi non modificabili" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Prezzo di acquisto al momento dell'ordine" - -#: core/docs/drf/viewsets.py:233 -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 "" -"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." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "acquistare un ordine senza creare un account" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finalizza l'acquisto dell'ordine per un utente non registrato." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Aggiungere un prodotto all'ordine" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Aggiunge un prodotto a un ordine utilizzando il `product_uuid` e gli " -"`attributi` forniti." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "" -"Aggiungete un elenco di prodotti da ordinare, le quantità non vengono " -"conteggiate" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Aggiunge un elenco di prodotti a un ordine, utilizzando il `product_uuid` e " -"gli `attributi` forniti." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Rimuovere un prodotto dall'ordine" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Rimuove un prodotto da un ordine utilizzando il `product_uuid` e gli " -"`attributi` forniti." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "" -"Rimuovete un prodotto dall'ordine, le quantità non verranno conteggiate" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Rimuove un elenco di prodotti da un ordine utilizzando il `product_uuid` e " -"gli `attributi` forniti." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Elenco di tutti gli attributi (vista semplice)" - -#: core/docs/drf/viewsets.py:282 -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." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Recuperare un singolo attributo (vista dettagliata)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Creare un attributo" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Non funziona per gli utenti che non fanno parte del personale." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Cancellare un attributo" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "" -"Riscrivere un attributo esistente salvando gli elementi non modificabili" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Riscrivere alcuni campi di un attributo esistente salvando i campi non " -"modificabili" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Aggiungere un prodotto all'ordine" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Aggiunge un prodotto a una lista dei desideri utilizzando il `product_uuid` " -"fornito." - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Rimuovere un prodotto dalla lista dei desideri" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Rimuove un prodotto da una wishlist utilizzando il `product_uuid` fornito." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Aggiungere molti prodotti alla lista dei desideri" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Aggiunge molti prodotti a una lista dei desideri utilizzando i " -"`product_uuids` forniti." - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Rimuovere un prodotto dall'ordine" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Rimuove molti prodotti da una lista di desideri utilizzando i " -"`product_uuids` forniti." - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Esempi: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Elenco di tutti i prodotti (visualizzazione semplice)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(esatto) UUID del prodotto" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Nome del prodotto" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(elenco) Nomi di categoria, senza distinzione tra maiuscole e minuscole" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(esatto) UUID della categoria" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(elenco) Nomi di tag, senza distinzione tra maiuscole e minuscole" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Prezzo minimo delle azioni" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Prezzo massimo del titolo" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(esatto) Solo prodotti attivi" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Nome del marchio" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Quantità minima di scorte" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(esatto) Digitale e fisico" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Consentito:** uuid, rating, nome, slug, creato, modificato, prezzo, casuale" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Recuperare un singolo prodotto (vista dettagliata)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "UUID o Slug del prodotto" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Creare un prodotto" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Riscrivere un prodotto esistente, preservando i campi non modificabili" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Aggiornare alcuni campi di un prodotto esistente, preservando i campi non " -"modificabili" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Eliminare un prodotto" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "elenca tutti i feedback consentiti per un prodotto" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Elenco di tutti gli indirizzi" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Recuperare un singolo indirizzo" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Creare un nuovo indirizzo" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Cancellare un indirizzo" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Aggiornare un intero indirizzo" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Aggiornare parzialmente un indirizzo" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Inserimento automatico dell'indirizzo" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Stringa di query dei dati grezzi, da aggiungere ai dati dell'endpoint geo-IP" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "limita la quantità di risultati, 1 < limite < 10, default: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "elencare tutti i feedback (vista semplice)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "recuperare un singolo feedback (vista dettagliata)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "creare un feedback" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "eliminare un feedback" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" -"Riscrivere una categoria esistente salvando gli elementi non modificabili" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non " -"modificabili" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "elencare tutte le relazioni ordine-prodotto (vista semplice)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "recuperare una singola relazione ordine-prodotto (vista dettagliata)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "creare una nuova relazione ordine-prodotto" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "sostituire una relazione ordine-prodotto esistente" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "aggiornare parzialmente una relazione ordine-prodotto esistente" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "eliminare una relazione ordine-prodotto" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Non è stato fornito alcun termine di ricerca." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Nome" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Categorie" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Categorie Lumache" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tag" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Prezzo minimo" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Max Price" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "È attivo" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Marchio" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Attributi" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Quantità" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Lumaca" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "È digitale" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Includere le sottocategorie" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Deve esserci una categoria_uuid per utilizzare il flag include_subcategories" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Ricerca (ID, nome del prodotto o numero di parte)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Acquistato dopo (incluso)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Acquistato prima (compreso)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "Email dell'utente" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID utente" - -#: core/filters.py:289 -msgid "Status" -msgstr "Stato" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "ID leggibile dall'uomo" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Genitore" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Intera categoria (con o senza almeno 1 prodotto)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Livello" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID del prodotto" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Chiave da cercare o da inserire nella cache" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Data to store in cache" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Timeout in secondi per l'inserimento dei dati nella cache" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Dati in cache" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Dati JSON camelizzati dall'URL richiesto" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Aggiungere un prodotto all'ordine" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Ordine {order_uuid} non trovato" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Rimuovere un prodotto dall'ordine" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Rimuovere tutti i prodotti dall'ordine" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Acquistare un ordine" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -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!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Eseguire un'azione su un elenco di prodotti nell'ordine" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Rimuovi/Aggiungi" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "L'azione deve essere \"aggiungere\" o \"rimuovere\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Aggiungere un prodotto all'ordine" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Lista dei desideri {wishlist_uuid} non trovata" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Rimuovere un prodotto dall'ordine" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Rimuovere un prodotto dall'ordine" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Rimuovere un prodotto dall'ordine" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Acquistare un ordine" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Stringa di indirizzo originale fornita dall'utente" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} non esiste: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Il limite deve essere compreso tra 1 e 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch: funziona a meraviglia" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Attributi" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Attributi raggruppati" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Gruppi di attributi" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Categorie" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Marche" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Categorie" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Percentuale di markup" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "" -"Quali attributi e valori possono essere utilizzati per filtrare questa " -"categoria." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tag per questa categoria" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Prodotti in questa categoria" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Venditori" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Latitudine (coordinata Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Longitudine (coordinata X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Come" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Rappresenta il feedback di un utente." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Notifiche" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "URL di download per il prodotto dell'ordine, se applicabile" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Un elenco di prodotti ordinati in questo ordine" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Indirizzo di fatturazione" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Indirizzo di spedizione per questo ordine, lasciare in bianco se è uguale " -"all'indirizzo di fatturazione o se non è applicabile" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Prezzo totale dell'ordine" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Quantità totale di prodotti in ordine" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Tutti i prodotti sono presenti nell'ordine digitale" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Ordini" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "URL immagine" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Immagini del prodotto" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Categoria" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Feedback" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Marchio" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Gruppi di attributi" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Prezzo" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Quantità" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Numero di feedback" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Prodotti" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Codici promozionali" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Prodotti in vendita" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promozioni" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Venditore" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Prodotto" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Prodotti desiderati" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Liste dei desideri" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Prodotti contrassegnati" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Tag del prodotto" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Contrassegnato dalle categorie" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Tag delle categorie" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Nome del progetto" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Email aziendale" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Nome della società" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Indirizzo dell'azienda" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Numero di telefono dell'azienda" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Utente host dell'e-mail" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Importo massimo per il pagamento" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Importo minimo per il pagamento" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Dati analitici" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Dati pubblicitari" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configurazione" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Codice lingua" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Nome della lingua" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Bandiera della lingua, se esiste :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Ottenere un elenco delle lingue supportate" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Risultati della ricerca dei prodotti" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Risultati della ricerca dei prodotti" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Genitore di questo gruppo" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Gruppo di attributi padre" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Nome del gruppo di attributi" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Gruppo di attributi" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Memorizza le credenziali e gli endpoint necessari per la comunicazione API " -"del fornitore." - -#: core/models.py:148 -msgid "authentication info" -msgstr "Informazioni sull'autenticazione" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Definire il markup per i prodotti recuperati da questo fornitore" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Percentuale di ricarico del fornitore" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Nome del fornitore" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Nome del fornitore" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Identificatore interno dell'etichetta del prodotto" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Nome del tag" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Nome intuitivo per l'etichetta del prodotto" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Nome del tag" - -#: core/models.py:213 -msgid "product tag" -msgstr "Etichetta del prodotto" - -#: core/models.py:251 -msgid "category tag" -msgstr "tag categoria" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "tag di categoria" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Caricare un'immagine che rappresenti questa categoria" - -#: core/models.py:332 -msgid "category image" -msgstr "Categoria immagine" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "" -"Definire una percentuale di ricarico per i prodotti di questa categoria" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Genitore di questa categoria per formare una struttura gerarchica" - -#: core/models.py:347 -msgid "parent category" -msgstr "Categoria di genitori" - -#: core/models.py:352 -msgid "category name" -msgstr "Nome della categoria" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Indicare un nome per questa categoria" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Aggiungere una descrizione dettagliata per questa categoria" - -#: core/models.py:361 -msgid "category description" -msgstr "Descrizione della categoria" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "tag che aiutano a descrivere o raggruppare questa categoria" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Priorità" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Nome del marchio" - -#: core/models.py:430 -msgid "brand name" -msgstr "Nome del marchio" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Caricare un logo che rappresenti questo marchio" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Immagine piccola del marchio" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Caricare un grande logo che rappresenti questo marchio" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Grande immagine del marchio" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Aggiungere una descrizione dettagliata del marchio" - -#: core/models.py:453 -msgid "brand description" -msgstr "Descrizione del marchio" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Categorie opzionali a cui questo marchio è associato" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Categorie" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Categoria a cui appartiene questo prodotto" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Associare facoltativamente questo prodotto a un marchio" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Indica se il prodotto è consegnato in formato digitale" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Il prodotto è digitale" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Fornire un nome identificativo chiaro per il prodotto" - -#: core/models.py:556 -msgid "product name" -msgstr "Nome del prodotto" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Aggiungere una descrizione dettagliata del prodotto" - -#: core/models.py:562 -msgid "product description" -msgstr "Descrizione del prodotto" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Numero di parte per questo prodotto" - -#: core/models.py:570 -msgid "part number" -msgstr "Numero di parte" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Categoria di questo attributo" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Gruppo di questo attributo" - -#: core/models.py:690 -msgid "string" -msgstr "Stringa" - -#: core/models.py:691 -msgid "integer" -msgstr "Intero" - -#: core/models.py:692 -msgid "float" -msgstr "Galleggiante" - -#: core/models.py:693 -msgid "boolean" -msgstr "Booleano" - -#: core/models.py:694 -msgid "array" -msgstr "Array" - -#: core/models.py:695 -msgid "object" -msgstr "Oggetto" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Tipo di valore dell'attributo" - -#: core/models.py:698 -msgid "value type" -msgstr "Tipo di valore" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Nome dell'attributo" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Nome dell'attributo" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Attributo" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Attributo di questo valore" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Il prodotto specifico associato al valore di questo attributo" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Prodotto associato" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "Il valore specifico per questo attributo" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "" -"Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." - -#: core/models.py:795 -msgid "image alt text" -msgstr "Testo alt dell'immagine" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Caricare il file immagine per questo prodotto" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Immagine del prodotto" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Determina l'ordine di visualizzazione delle immagini" - -#: core/models.py:806 -msgid "display priority" -msgstr "Priorità del display" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Il prodotto che questa immagine rappresenta" - -#: core/models.py:825 -msgid "product images" -msgstr "Immagini del prodotto" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Percentuale di sconto per i prodotti selezionati" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Percentuale di sconto" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Fornite un nome unico per questa promozione" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Nome della promozione" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Descrizione della promozione" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Selezionare i prodotti inclusi in questa promozione" - -#: core/models.py:885 -msgid "included products" -msgstr "Prodotti inclusi" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promozione" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Il venditore che fornisce questo stock di prodotti" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Venditore associato" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Prezzo finale al cliente dopo i ricarichi" - -#: core/models.py:930 -msgid "selling price" -msgstr "Prezzo di vendita" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Il prodotto associato a questa voce di magazzino" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Il prezzo pagato al venditore per questo prodotto" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Prezzo di acquisto del fornitore" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Quantità disponibile del prodotto in magazzino" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Quantità in magazzino" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "SKU assegnato dal fornitore per identificare il prodotto" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU del venditore" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "File digitale associato a questo stock, se applicabile" - -#: core/models.py:961 -msgid "digital file" -msgstr "File digitale" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Voci di magazzino" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Prodotti che l'utente ha contrassegnato come desiderati" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Utente che possiede questa wishlist" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Proprietario della lista dei desideri" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Lista dei desideri" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} non esiste: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documentario" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentari" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Non risolto" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Indirizzo del cliente" - -#: core/models.py:1129 -msgid "address line" -msgstr "Linea di indirizzo" - -#: core/models.py:1131 -msgid "street" -msgstr "Via" - -#: core/models.py:1132 -msgid "district" -msgstr "Distretto" - -#: core/models.py:1133 -msgid "city" -msgstr "Città" - -#: core/models.py:1134 -msgid "region" -msgstr "Regione" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Codice postale" - -#: core/models.py:1136 -msgid "country" -msgstr "Paese" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Risposta JSON completa di geocoder per questo indirizzo" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Risposta JSON memorizzata dal servizio di geocodifica" - -#: core/models.py:1159 -msgid "address" -msgstr "Indirizzo" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Indirizzi" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Codice univoco utilizzato da un utente per riscattare uno sconto" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Identificatore del codice promozionale" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Importo fisso dello sconto applicato se non si utilizza la percentuale" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Importo fisso dello sconto" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Sconto percentuale" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Data di scadenza del codice promozionale" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Tempo di validità finale" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Data a partire dalla quale il codice promozionale è valido" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Ora di inizio validità" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Timestamp in cui è stato utilizzato il codice promozionale, vuoto se non " -"ancora utilizzato" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Timestamp d'uso" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Utente assegnato a questo codice promozionale, se applicabile" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Utente assegnato" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Codice promozionale" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Codici promozionali" - -#: core/models.py:1260 -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." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Il codice promozionale è già stato utilizzato" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Codice promozionale opzionale applicato a questo ordine" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Codice promozionale applicato" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "L'indirizzo di spedizione utilizzato per questo ordine" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Indirizzo di spedizione" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Stato attuale dell'ordine nel suo ciclo di vita" - -#: core/models.py:1349 -msgid "order status" -msgstr "Stato dell'ordine" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"Struttura JSON delle notifiche da mostrare agli utenti; nell'interfaccia " -"utente dell'amministratore viene utilizzata la visualizzazione a tabella." - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "L'utente che ha effettuato l'ordine" - -#: core/models.py:1367 -msgid "user" -msgstr "Utente" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Acquista tempo" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Un identificatore leggibile dall'uomo per l'ordine" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "ID leggibile dall'uomo" - -#: core/models.py:1388 -msgid "order" -msgstr "Ordine" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Un utente può avere un solo ordine pendente alla volta!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "" -"Non è possibile aggiungere prodotti a un ordine che non sia in sospeso." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "" -"Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "Non è possibile rimuovere i prodotti da un ordine che non è in corso." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} non esiste con la query <{query}>." - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Il codice promozionale non esiste" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" -"È possibile acquistare solo prodotti fisici con indirizzo di spedizione " -"specificato!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "L'indirizzo non esiste" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"In questo momento non è possibile acquistare, riprovare tra qualche minuto." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Valore di forza non valido" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Non è possibile acquistare un ordine vuoto!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Fondi insufficienti per completare l'ordine" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"non è possibile acquistare senza registrazione, si prega di fornire le " -"seguenti informazioni: nome del cliente, e-mail del cliente, numero di " -"telefono del cliente" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Metodo di pagamento non valido: {payment_method} da " -"{available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "" -"Il prezzo pagato dal cliente per questo prodotto al momento dell'acquisto." - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Prezzo di acquisto al momento dell'ordine" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Commenti interni" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Notifiche degli utenti" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "Rappresentazione JSON degli attributi di questo elemento" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Attributi del prodotto ordinati" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Riferimento all'ordine padre che contiene questo prodotto" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Ordine dei genitori" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Il prodotto specifico associato a questa riga d'ordine" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Quantità di questo prodotto specifico nell'ordine" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Quantità di prodotto" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Stato attuale di questo prodotto nell'ordine" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Stato della linea di prodotti" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "azione errata specificata per il feedback: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "non è possibile dare un riscontro a un ordine non ricevuto" - -#: core/models.py:1882 -msgid "download" -msgstr "Scaricare" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Scaricamento" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Non è possibile scaricare un bene digitale per un ordine non finito." - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Commenti di feedback" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Riferisce il prodotto specifico in un ordine di cui si tratta il feedback." - -#: core/models.py:1930 -msgid "related order product" -msgstr "Prodotto correlato all'ordine" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Valutazione del prodotto assegnata dall'utente" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Valutazione del prodotto" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Feedback" - -#: core/serializers/utility.py:87 -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." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Errore durante la creazione del codice promozionale: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Conferma dell'ordine" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hello %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Grazie per il vostro ordine #%(order.pk)s! Siamo lieti di informarla che " -"abbiamo preso in carico il suo ordine. Di seguito sono riportati i dettagli " -"del vostro ordine:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Totale" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Prezzo totale" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -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." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Cordiali saluti,
il team %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Tutti i diritti riservati" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Ordine consegnato" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Hello %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Abbiamo elaborato con successo il suo ordine №%(order_uuid)s! Di seguito " -"sono riportati i dettagli del suo ordine:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"ulteriori\n" -" informazioni" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Valore" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -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." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Cordiali saluti,
il team %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Chiave" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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 " -"seguito sono riportati i dettagli dell'ordine:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Prezzo di spedizione" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Il vostro ordine sarà consegnato al seguente indirizzo:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Cordiali saluti,
il team %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"tutti i diritti\n" -" riservato" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Sono richiesti sia i dati che il timeout" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "" -"Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi." - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} deve essere un modello" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} deve essere un oggetto elenco" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Contatti avviati" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Conferma d'ordine" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Ordine consegnato" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "Non si ha il permesso di eseguire questa azione." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Il parametro NOMINATIM_URL deve essere configurato!" - -#: core/validators.py:16 -#, 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" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Formato del numero di telefono non valido" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "È possibile scaricare l'asset digitale una sola volta" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon non trovata" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Errore di geocodifica: {e}" diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo deleted file mode 100644 index 683bc591..00000000 Binary files a/core/locale/ja_JP/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/ja_JP/LC_MESSAGES/django.po b/core/locale/ja_JP/LC_MESSAGES/django.po deleted file mode 100644 index 3e9f234c..00000000 --- a/core/locale/ja_JP/LC_MESSAGES/django.po +++ /dev/null @@ -1,2282 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: ja-jp\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "ユニークID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。" - -#: core/abstract.py:20 -msgid "is active" -msgstr "アクティブ" - -#: core/abstract.py:21 -msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "" -"falseに設定された場合、このオブジェクトは必要なパーミッションのないユーザーに" -"は見えない。" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "作成" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "そのオブジェクトが初めてデータベースに登場した時" - -#: core/abstract.py:27 -msgid "modified" -msgstr "変形" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "オブジェクトの最終編集日時" - -#: core/admin.py:55 -msgid "translations" -msgstr "翻訳" - -#: core/admin.py:59 -msgid "general" -msgstr "一般" - -#: core/admin.py:61 -msgid "relations" -msgstr "関係" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "メタデータ" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "タイムスタンプ" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "選択した %(verbose_name_plural)s をアクティブにする。" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)sは正常に起動しました!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "選択された %(verbose_name_plural)s を非アクティブにする。" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)sは正常に停止しました。" - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "属性値" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "属性値" - -#: core/admin.py:124 -msgid "image" -msgstr "画像" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "画像" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "在庫" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "株式" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "商品のご注文" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "商品のご注文" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "子供たち" - -#: core/admin.py:471 -msgid "Config" -msgstr "コンフィグ" - -#: core/apps.py:8 -msgid "core" -msgstr "コア" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "終了" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "配達" - -#: core/choices.py:6 -msgid "delivered" -msgstr "配信" - -#: core/choices.py:7 -msgid "canceled" -msgstr "キャンセル" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "失敗" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "申請中" - -#: core/choices.py:10 -msgid "accepted" -msgstr "受諾" - -#: core/choices.py:11 -msgid "money returned" -msgstr "返金" - -#: core/choices.py:17 -msgid "payment" -msgstr "支払い" - -#: core/choices.py:21 -msgid "momental" -msgstr "モメンタル" - -#: core/choices.py:24 -msgid "successful" -msgstr "成功" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "キャッシュI/O" - -#: core/docs/drf/views.py:19 -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 "" -"許可されたデータをキャッシュから読み出すには、キーのみを適用する。\n" -"キャッシュにデータを書き込むには、認証付きのキー、データ、タイムアウトを適用" -"する。" - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "サポートされている言語のリストを取得する" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "アプリケーションの公開可能なパラメータを取得する" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "サポートチームにメッセージを送る" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "CORSされたURLを要求する。httpsのみ許可。" - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "プロジェクト全体のテーブルを検索するグローバル検索エンドポイント" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "ビジネスとして注文を購入する" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"提供された `product` と `product_uuid` と `attributes` を使用して、ビジネスと" -"して注文を購入する。" - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "すべての属性グループをリストアップ(シンプルビュー)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "単一の属性グループを取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "属性グループの作成" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "属性グループの削除" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "既存の属性グループを書き換えて、編集不可能なものを保存する。" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" -"既存の属性グループのいくつかのフィールドを書き換え、編集不可能なものを保存す" -"る。" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "すべての属性をリストアップ(シンプルな表示)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "単一の属性を取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "属性を作成する" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "属性を削除する" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "既存の属性を書き換える。" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "すべての属性値をリストアップ(シンプルビュー)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "単一の属性値を取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "属性値の作成" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "属性値の削除" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "既存の属性値を書き換える。" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" -"既存の属性値のいくつかのフィールドを書き換え、編集不可能な値を保存する。" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "全カテゴリーを一覧表示(シンプル表示)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "単一のカテゴリーを取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "カテゴリーを作成する" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "カテゴリーの削除" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "全カテゴリーを一覧表示(シンプル表示)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "スタッフ以外のユーザーについては、自分の注文のみが返却される。" - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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の大文字小文字を区別しない部分文字列検索" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "buy_time >= このISO 8601の日時を持つ注文をフィルタリングする。" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "buy_time <= このISO 8601の日付時間の注文をフィルタリングする。" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "正確な順序UUIDによるフィルタリング" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "人間が読み取れる正確な注文IDによるフィルタリング" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"ユーザーのEメールによるフィルタリング(大文字・小文字を区別しない完全一致)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "ユーザーのUUIDによるフィルタリング" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"注文ステータスによるフィルタリング(大文字と小文字を区別しない部分文字列マッ" -"チ)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"uuid、human_readable_id、user_email、user、status、created、modified、" -"buy_time、randomのいずれかによる順序。降順の場合は'-'をプレフィックスとしてつ" -"ける(例:'-buy_time')。" - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "単一のカテゴリーを取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "属性を作成する" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "スタッフ以外のユーザーには使えない。" - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "属性を削除する" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "注文時の購入価格" - -#: core/docs/drf/viewsets.py:233 -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` が使用された場合、トランザクションが開始" -"されます。" - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "アカウントを作成せずに注文を購入する" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "は、未登録ユーザーの注文購入を確定します。" - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "注文に商品を追加する" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"指定した `product_uuid` と `attributes` を使用して、商品を注文に追加する。" - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "数量はカウントされません。" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"指定された `product_uuid` と `attributes` を使用して、注文に商品のリストを追" -"加する。" - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "注文から商品を削除する" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"指定された `product_uuid` と `attributes` を使用して、注文から商品を削除す" -"る。" - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "注文から商品を削除すると、数量はカウントされません。" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"指定された `product_uuid` と `attributes` を用いて、注文から商品のリストを削" -"除する。" - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "すべての属性をリストアップ(シンプルな表示)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "スタッフ以外のユーザーには、自分のウィッシュリストのみが返されます。" - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "単一の属性を取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "属性を作成する" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "スタッフ以外のユーザーには使えない。" - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "属性を削除する" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "既存の属性を書き換える。" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "注文に商品を追加する" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "指定された `product_uuid` を使ってウィッシュリストに商品を追加する。" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "ウィッシュリストから商品を削除する" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"指定された `product_uuid` を使ってウィッシュリストから商品を削除します。" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "ウィッシュリストに多くの商品を追加する" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"指定された `product_uuids` を使ってウィッシュリストに多くの商品を追加する。" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "注文から商品を削除する" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"指定された `product_uuids` を使ってウィッシュリストから多くの商品を削除する。" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"例 \n" -"color=exact-red`、`size=gt-10`、`features=in-[\"wifi\", \"bluetooth\"]`、\n" -"b64-description=icontains-aGVhdC1jb2xk`。" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "全商品を一覧表示(シンプル表示)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(正確には)製品UUID" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(アイコン) 製品名" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(リスト)カテゴリー名、大文字と小文字は区別しない" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(正確には)カテゴリーUUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(リスト) タグ名、大文字と小文字は区別されない" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(最低株価" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(最大株価" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(正確には)アクティブ製品のみ" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(商品名" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(最低在庫量" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(正確には)デジタルとフィジカル" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "単一の製品を取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "製品UUIDまたはスラグ" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "製品を作る" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "編集不可能なフィールドを保持したまま、既存の製品を書き換える。" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新す" -"る。" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "製品を削除する" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "製品に対して許可されたすべてのフィードバックを一覧表示します。" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "全住所のリスト" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "単一アドレスの取得" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "新しいアドレスを作成する" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "アドレスの削除" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "アドレス全体の更新" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "アドレスの一部更新" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "オートコンプリート住所入力" - -#: core/docs/drf/viewsets.py:576 -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 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" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "結果を制限する, 1 < limit < 10, デフォルト: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "すべてのフィードバックを表示する(シンプルな表示)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "単一のフィードバックを取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "フィードバックを作成する" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "フィードバックを削除する" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "既存のフィードバックを書き換える。" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保" -"存する。" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "すべての注文と商品の関係をリストアップする(シンプルビュー)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "単一の注文と商品の関係を取得する(詳細表示)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "新しい注文と商品の関係を作る" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "既存の注文と商品の関係を置き換える" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "既存の注文と商品の関係を部分的に更新する" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "注文と商品の関係を削除する" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "検索語はありません。" - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "ユーユーアイディー" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "名称" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "カテゴリー" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "カテゴリー ナメクジ" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "タグ" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "最低価格" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "最高価格" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "アクティブ" - -#: core/filters.py:70 -msgid "Brand" -msgstr "ブランド" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "属性" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "数量" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "スラッグ" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "デジタル" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "サブカテゴリーを含む" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"include_subcategoriesフラグを使うには、category_uuidがなければならない。" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "検索(ID、製品名または部品番号)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "購入時期" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "以前に購入したもの(含む)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "ユーザーEメール" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "ユーザーUUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "ステータス" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "人間が読めるID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "親" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)" - -#: core/filters.py:362 -msgid "Level" -msgstr "レベル" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "製品UUID" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "キャッシュを探すキー、またはキャッシュにセットするキー" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "キャッシュに保存するデータ" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "キャッシュにデータをセットするタイムアウト時間(秒" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "キャッシュ・データ" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "リクエストされたURLからキャメル化されたJSONデータ" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "http(s)://で始まるURLのみが許可されます。" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "注文に商品を追加する" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "注文{order_uuid}が見つかりません" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "注文から商品を削除する" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "注文からすべての商品を削除する" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "注文する" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "order_uuidまたはorder_hr_idを入力してください!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "注文商品のリストに対してアクションを実行する" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "削除/追加" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "アクションは \"add \"か \"remove \"のどちらかでなければならない!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "注文に商品を追加する" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "ウィッシュリスト{wishlist_uuid}が見つかりません。" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "注文から商品を削除する" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "注文から商品を削除する" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "注文から商品を削除する" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "注文する" - -#: core/graphene/mutations.py:456 -msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "" -"属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "ユーザーが提供したオリジナルのアドレス文字列" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} は存在しません:{uuid} は存在しません。" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "上限は1から10の間でなければならない" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - 魅力のように動作" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "属性" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "グループ化された属性" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "属性のグループ" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "カテゴリー" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "ブランド" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "カテゴリー" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "マークアップ率" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "このカテゴリのフィルタリングに使用できる属性と値。" - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "このカテゴリーの商品の最低価格と最高価格がある場合。" - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "このカテゴリのタグ" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "このカテゴリの製品" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "ベンダー" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "緯度(Y座標)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "経度(X座標)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "どのように" - -#: core/graphene/object_types.py:262 -msgid "rating value from 1 to 10, inclusive, or 0 if not set." -msgstr "1から10までの評価値(設定されていない場合は0)。" - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "ユーザーからのフィードバックを表す。" - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "お知らせ" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "注文商品のリスト" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "請求先住所" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "請求先住所と同じ場合、または該当しない場合は空白にしてください。" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "この注文の合計金額" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "注文商品の総数量" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "ご注文の商品はすべてデジタルですか?" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "受注状況" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "画像URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "製品画像" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "カテゴリー" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "フィードバック" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "ブランド" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "属性グループ" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "価格" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "数量" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "フィードバック数" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "製品紹介" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "プロモコード" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "販売商品" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "プロモーション" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "ベンダー" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "製品" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "ウィッシュリスト掲載商品" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "ウィッシュリスト" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "タグ別アーカイブ" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "商品タグ" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "タグ別アーカイブ" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "カテゴリー' タグ" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "プロジェクト名" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "会社Eメール" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "会社名" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "会社住所" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "会社電話番号" - -#: core/graphene/object_types.py:506 -msgid "email from, sometimes it must be used instead of host user value" -msgstr "'email from' は、ホストユーザの値の代わりに使用されることがあります。" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "メールホストユーザー" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "支払限度額" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "最低支払額" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "分析データ" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "広告データ" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "構成" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "言語コード" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "言語名" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "言語フラグがある場合 :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "サポートされている言語のリストを取得する" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "製品検索結果" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "製品検索結果" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "このグループの親" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "親属性グループ" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "属性グループ名" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "属性グループ" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。" - -#: core/models.py:148 -msgid "authentication info" -msgstr "認証情報" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "このベンダーから取得した商品のマークアップを定義する。" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "ベンダーのマークアップ率" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "このベンダーの名前" - -#: core/models.py:159 -msgid "vendor name" -msgstr "ベンダー名" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "商品タグの内部タグ識別子" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "タグ名" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "商品タグのユーザーフレンドリーな名前" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "タグ表示名" - -#: core/models.py:213 -msgid "product tag" -msgstr "商品タグ" - -#: core/models.py:251 -msgid "category tag" -msgstr "カテゴリタグ" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "カテゴリータグ" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "このカテゴリーを表す画像をアップロードする" - -#: core/models.py:332 -msgid "category image" -msgstr "カテゴリーイメージ" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "このカテゴリの商品のマークアップ率を定義する" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "階層構造を形成するこのカテゴリの親" - -#: core/models.py:347 -msgid "parent category" -msgstr "親カテゴリー" - -#: core/models.py:352 -msgid "category name" -msgstr "カテゴリー名" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "このカテゴリの名前を入力してください。" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "このカテゴリの詳細説明を追加する" - -#: core/models.py:361 -msgid "category description" -msgstr "カテゴリー説明" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "優先順位" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "ブランド名" - -#: core/models.py:430 -msgid "brand name" -msgstr "ブランド名" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "このブランドを代表するロゴをアップロードする" - -#: core/models.py:439 -msgid "brand small image" -msgstr "小さなブランドイメージ" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "このブランドを象徴する大きなロゴをアップロードする" - -#: core/models.py:447 -msgid "brand big image" -msgstr "大きなブランドイメージ" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "ブランドの詳細な説明を加える" - -#: core/models.py:453 -msgid "brand description" -msgstr "ブランド説明" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "このブランドが関連するオプション・カテゴリー" - -#: core/models.py:459 -msgid "associated categories" -msgstr "カテゴリー" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "この製品が属するカテゴリ" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "オプションでこの製品をブランドと関連付ける" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "この商品の説明やグループ分けに役立つタグ" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "この製品がデジタル配信されるかどうかを示す" - -#: core/models.py:549 -msgid "is product digital" -msgstr "製品はデジタルか" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "製品の明確な識別名を提供する" - -#: core/models.py:556 -msgid "product name" -msgstr "商品名" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "商品の詳細説明を追加する" - -#: core/models.py:562 -msgid "product description" -msgstr "商品説明" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "この製品の品番" - -#: core/models.py:570 -msgid "part number" -msgstr "品番" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "この属性のカテゴリー" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "この属性のグループ" - -#: core/models.py:690 -msgid "string" -msgstr "ストリング" - -#: core/models.py:691 -msgid "integer" -msgstr "整数" - -#: core/models.py:692 -msgid "float" -msgstr "フロート" - -#: core/models.py:693 -msgid "boolean" -msgstr "ブーリアン" - -#: core/models.py:694 -msgid "array" -msgstr "配列" - -#: core/models.py:695 -msgid "object" -msgstr "対象" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "属性値のタイプ" - -#: core/models.py:698 -msgid "value type" -msgstr "値の種類" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "この属性の名前" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "属性名" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "属性" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "この値の属性" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "この属性の値に関連する特定の製品" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "関連製品" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "この属性の具体的な値" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "アクセシビリティのために、画像に代替テキストを提供する。" - -#: core/models.py:795 -msgid "image alt text" -msgstr "画像のaltテキスト" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "この商品の画像ファイルをアップロードする" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "商品画像" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "画像の表示順を決める" - -#: core/models.py:806 -msgid "display priority" -msgstr "表示優先度" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "この画像が表す製品" - -#: core/models.py:825 -msgid "product images" -msgstr "商品画像" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "選択した商品の割引率" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "割引率" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "このプロモーションのユニークな名前を入力してください。" - -#: core/models.py:873 -msgid "promotion name" -msgstr "プロモーション名" - -#: core/models.py:879 -msgid "promotion description" -msgstr "プロモーション内容" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "キャンペーン対象商品をお選びください。" - -#: core/models.py:885 -msgid "included products" -msgstr "含まれる製品" - -#: core/models.py:889 -msgid "promotion" -msgstr "プロモーション" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "この製品の在庫を供給しているベンダー" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "関連ベンダー" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "マークアップ後の顧客への最終価格" - -#: core/models.py:930 -msgid "selling price" -msgstr "販売価格" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "このストックエントリーに関連する製品" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "この製品に対してベンダーに支払われた価格" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "ベンダーの購入価格" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "在庫数" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "在庫数" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "製品を識別するためにベンダーが割り当てたSKU" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "ベンダーのSKU" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "この銘柄に関連するデジタルファイル(該当する場合" - -#: core/models.py:961 -msgid "digital file" -msgstr "デジタルファイル" - -#: core/models.py:970 -msgid "stock entries" -msgstr "ストックエントリー" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "ユーザーが欲しいとマークした商品" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "このウィッシュリストを所有しているユーザー" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "ウィッシュリストのオーナー" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "ウィッシュリスト" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name}が存在しません:{product_uuid}が存在しません。" - -#: core/models.py:1071 -msgid "documentary" -msgstr "ドキュメンタリー" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "ドキュメンタリー" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "未解決" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "お客様の住所" - -#: core/models.py:1129 -msgid "address line" -msgstr "住所" - -#: core/models.py:1131 -msgid "street" -msgstr "ストリート" - -#: core/models.py:1132 -msgid "district" -msgstr "地区" - -#: core/models.py:1133 -msgid "city" -msgstr "都市" - -#: core/models.py:1134 -msgid "region" -msgstr "地域" - -#: core/models.py:1135 -msgid "postal code" -msgstr "郵便番号" - -#: core/models.py:1136 -msgid "country" -msgstr "国名" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "ジオロケーションポイント(経度、緯度)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "この住所に対するジオコーダーからの完全なJSON応答" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" - -#: core/models.py:1159 -msgid "address" -msgstr "住所" - -#: core/models.py:1160 -msgid "addresses" -msgstr "住所" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "ユーザーが割引を利用する際に使用する固有のコード" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "プロモコード識別子" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "パーセントを使用しない場合に適用される固定割引額" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "固定割引額" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "定額を使用しない場合に適用される割引率" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "割引率" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "プロモコードの有効期限が切れるタイムスタンプ" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "終了有効時間" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "このプロモコードが有効なタイムスタンプ" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "開始有効時間" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "使用タイムスタンプ" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "該当する場合、このプロモコードに割り当てられたユーザー" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "担当ユーザー" - -#: core/models.py:1252 -msgid "promo code" -msgstr "プロモコード" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "プロモコード" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちら" -"も定義してはならない。" - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "プロモコードはすでに使用されています" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "プロモコード {self.uuid} の割引タイプが無効です。" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "この注文に使用される請求先住所" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "この注文に適用されるプロモコード" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "プロモーションコード適用" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "この注文に使用された配送先住所" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "配送先住所" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "ライフサイクルにおける現在の注文状況" - -#: core/models.py:1349 -msgid "order status" -msgstr "注文状況" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "この注文の注文属性のJSON表現" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "注文を行ったユーザー" - -#: core/models.py:1367 -msgid "user" -msgstr "ユーザー" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "注文が確定したタイムスタンプ" - -#: core/models.py:1374 -msgid "buy time" -msgstr "時間を買う" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "オーダーの人間が読み取り可能な識別子。" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "人間が読めるID" - -#: core/models.py:1388 -msgid "order" -msgstr "オーダー" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "保留中の注文以外の注文に商品を追加することはできません。" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "アクティブでない商品を注文に追加することはできません。" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "在庫以上の商品を追加することはできません。" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "保留中の注文以外の注文から商品を削除することはできません。" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "クエリ<{query}>で{name}が存在しません。" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "プロモコードが存在しない" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "配送先住所が指定された現物商品のみ購入可能!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "アドレスが存在しない" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "無効なフォース値" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "空注文はできません!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "注文を完了するための資金不足" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お" -"客様のお名前、お客様のEメール、お客様の電話番号" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"支払方法が無効です:{available_payment_methods}からの{payment_method}が無効で" -"す!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "この商品の購入時に顧客が支払った価格" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "注文時の購入価格" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "この注文商品に関する管理者への内部コメント" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "社内コメント" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "ユーザー通知" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "このアイテムの属性のJSON表現" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "製品属性の順序" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "この商品を含む親注文への参照" - -#: core/models.py:1758 -msgid "parent order" -msgstr "親注文" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "この注文ラインに関連する特定の製品" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "注文に含まれる特定の商品の数量" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "製品数量" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "この商品の現在のご注文状況" - -#: core/models.py:1783 -msgid "product line status" -msgstr "製品ラインの状況" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "フィードバックに指定されたアクションが間違っています:{action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "受信していない注文をフィードバックすることはできません。" - -#: core/models.py:1882 -msgid "download" -msgstr "ダウンロード" - -#: core/models.py:1883 -msgid "downloads" -msgstr "ダウンロード" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "未完成の注文のデジタル資産をダウンロードすることはできません。" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "ユーザーから寄せられた製品使用体験に関するコメント" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "フィードバック・コメント" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" - -#: core/models.py:1930 -msgid "related order product" -msgstr "関連注文商品" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "ユーザーによる製品の評価" - -#: core/models.py:1936 -msgid "product rating" -msgstr "製品評価" - -#: core/models.py:1944 -msgid "feedback" -msgstr "フィードバック" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力す" -"る必要があります。" - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "プロモコード作成中にエラーが発生しました:{e!s}です。" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "ご注文の確認" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "ロゴ" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "こんにちは、%(order.user.first_name)sです、" - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"ご注文ありがとうございます#%(order.pk)s!ご注文を承りましたことをお知らせいた" -"します。以下、ご注文の詳細です:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "合計" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "合計価格" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -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までお気軽にお問い合わ" -"せください。" - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "よろしくお願いします、
%(config.PROJECT_NAME)sのチーム。" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "無断複写・転載を禁じます。" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "注文の配達" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "こんにちは、%(user_first_name)sです、" - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"ご注文の№%(order_uuid)sが正常に処理されました!以下はご注文の詳細です:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"追加\n" -" 追加情報" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "価値" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"ご不明な点がございましたら、%(contact_email)sまでお気軽にお問い合わせくださ" -"い。" - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "よろしくお願いします、
%(project_name)sのチーム。" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "キー" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" -" the details of your order:" -msgstr "" -"ご注文ありがとうございます!ご購入を確認させていただきました。以下、ご注文の" -"詳細です:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "送料" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "ご注文の商品は以下の住所に配送されます:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "よろしくお願いします、
%(config.PROJECT_NAME)sチーム。" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"すべての権利\n" -" 予約済み" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "データとタイムアウトの両方が必要" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "無効なタイムアウト値です。" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model}はモデルでなければならない" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data}はリストオブジェクトでなければならない" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | お問い合わせ| お問い合わせ" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME}|注文確認| 注文確認" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME}|プロジェクト名| 注文の配信" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "この操作を行う権限がありません。" - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "NOMINATIM_URLパラメータを設定する必要があります!" - -#: 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}ピクセルを超えないこと。" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "無効な電話番号形式" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "デジタルアセットのダウンロードは1回限りです。" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "ファビコンが見つかりません" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "ジオコーディングエラー:{e}" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po deleted file mode 100644 index 845780f1..00000000 --- a/core/locale/kk_KZ/LC_MESSAGES/django.po +++ /dev/null @@ -1,2204 +0,0 @@ -# EVIBES GETTEXT TRANSLATIONS -# 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 2.8.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-06-16 08:59+0100\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" - -#: core/abstract.py:20 -msgid "is active" -msgstr "" - -#: core/abstract.py:21 -msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "" - -#: core/abstract.py:27 -msgid "modified" -msgstr "" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "" - -#: core/admin.py:55 -msgid "translations" -msgstr "" - -#: core/admin.py:59 -msgid "general" -msgstr "" - -#: core/admin.py:61 -msgid "relations" -msgstr "" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "" - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "" - -#: core/admin.py:124 -msgid "image" -msgstr "" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "" - -#: core/admin.py:471 -msgid "Config" -msgstr "" - -#: core/apps.py:8 -msgid "core" -msgstr "" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "" - -#: core/choices.py:6 -msgid "delivered" -msgstr "" - -#: core/choices.py:7 -msgid "canceled" -msgstr "" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "" - -#: core/choices.py:10 -msgid "accepted" -msgstr "" - -#: core/choices.py:11 -msgid "money returned" -msgstr "" - -#: core/choices.py:17 -msgid "payment" -msgstr "" - -#: core/choices.py:21 -msgid "momental" -msgstr "" - -#: core/choices.py:24 -msgid "successful" -msgstr "" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "" - -#: core/docs/drf/views.py:19 -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 "" - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "" - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" - -#: core/docs/drf/viewsets.py:158 -msgid "" -"Case-insensitive substring search across human_readable_id, order_products." -"product.name, and order_products.product.partnumber" -msgstr "" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "" - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "" - -#: core/docs/drf/viewsets.py:233 -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 "" - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "" - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "" - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`b64-description=icontains-aGVhdC1jb2xk`" -msgstr "" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"Comma-separated list of fields to sort by. Prefix with `-` for " -"descending. \n" -"**Allowed:** uuid, rating, name, slug, created, modified, price, random" -msgstr "" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "" - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "" - -#: core/filters.py:70 -msgid "Brand" -msgstr "" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "" - -#: core/filters.py:289 -msgid "Status" -msgstr "" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "" - -#: core/filters.py:354 -msgid "Parent" -msgstr "" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "" - -#: core/filters.py:362 -msgid "Level" -msgstr "" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "" - -#: core/graphene/mutations.py:456 -msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "" - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "" - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "" - -#: core/graphene/object_types.py:262 -msgid "rating value from 1 to 10, inclusive, or 0 if not set." -msgstr "" - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "" - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "" - -#: core/graphene/object_types.py:506 -msgid "email from, sometimes it must be used instead of host user value" -msgstr "" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" - -#: core/models.py:148 -msgid "authentication info" -msgstr "" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "" - -#: core/models.py:159 -msgid "vendor name" -msgstr "" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "" - -#: core/models.py:213 -msgid "product tag" -msgstr "" - -#: core/models.py:251 -msgid "category tag" -msgstr "" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "" - -#: core/models.py:332 -msgid "category image" -msgstr "" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "" - -#: core/models.py:347 -msgid "parent category" -msgstr "" - -#: core/models.py:352 -msgid "category name" -msgstr "" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "" - -#: core/models.py:361 -msgid "category description" -msgstr "" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "" - -#: core/models.py:430 -msgid "brand name" -msgstr "" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "" - -#: core/models.py:439 -msgid "brand small image" -msgstr "" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "" - -#: core/models.py:447 -msgid "brand big image" -msgstr "" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "" - -#: core/models.py:453 -msgid "brand description" -msgstr "" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "" - -#: core/models.py:459 -msgid "associated categories" -msgstr "" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "" - -#: core/models.py:549 -msgid "is product digital" -msgstr "" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "" - -#: core/models.py:556 -msgid "product name" -msgstr "" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "" - -#: core/models.py:562 -msgid "product description" -msgstr "" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "" - -#: core/models.py:570 -msgid "part number" -msgstr "" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "" - -#: core/models.py:690 -msgid "string" -msgstr "" - -#: core/models.py:691 -msgid "integer" -msgstr "" - -#: core/models.py:692 -msgid "float" -msgstr "" - -#: core/models.py:693 -msgid "boolean" -msgstr "" - -#: core/models.py:694 -msgid "array" -msgstr "" - -#: core/models.py:695 -msgid "object" -msgstr "" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "" - -#: core/models.py:698 -msgid "value type" -msgstr "" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "" - -#: core/models.py:795 -msgid "image alt text" -msgstr "" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "" - -#: core/models.py:806 -msgid "display priority" -msgstr "" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "" - -#: core/models.py:825 -msgid "product images" -msgstr "" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "" - -#: core/models.py:873 -msgid "promotion name" -msgstr "" - -#: core/models.py:879 -msgid "promotion description" -msgstr "" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "" - -#: core/models.py:885 -msgid "included products" -msgstr "" - -#: core/models.py:889 -msgid "promotion" -msgstr "" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "" - -#: core/models.py:930 -msgid "selling price" -msgstr "" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "" - -#: core/models.py:961 -msgid "digital file" -msgstr "" - -#: core/models.py:970 -msgid "stock entries" -msgstr "" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "" - -#: core/models.py:1071 -msgid "documentary" -msgstr "" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "" - -#: core/models.py:1129 -msgid "address line" -msgstr "" - -#: core/models.py:1131 -msgid "street" -msgstr "" - -#: core/models.py:1132 -msgid "district" -msgstr "" - -#: core/models.py:1133 -msgid "city" -msgstr "" - -#: core/models.py:1134 -msgid "region" -msgstr "" - -#: core/models.py:1135 -msgid "postal code" -msgstr "" - -#: core/models.py:1136 -msgid "country" -msgstr "" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "" - -#: core/models.py:1159 -msgid "address" -msgstr "" - -#: core/models.py:1160 -msgid "addresses" -msgstr "" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "" - -#: core/models.py:1252 -msgid "promo code" -msgstr "" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "" - -#: core/models.py:1349 -msgid "order status" -msgstr "" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "" - -#: core/models.py:1367 -msgid "user" -msgstr "" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "" - -#: core/models.py:1374 -msgid "buy time" -msgstr "" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "" - -#: core/models.py:1388 -msgid "order" -msgstr "" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "" - -#: core/models.py:1758 -msgid "parent order" -msgstr "" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "" - -#: core/models.py:1783 -msgid "product line status" -msgstr "" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" - -#: core/models.py:1882 -msgid "download" -msgstr "" - -#: core/models.py:1883 -msgid "downloads" -msgstr "" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" - -#: core/models.py:1930 -msgid "related order product" -msgstr "" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "" - -#: core/models.py:1936 -msgid "product rating" -msgstr "" - -#: core/models.py:1944 -msgid "feedback" -msgstr "" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "" - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "" - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" -" the details of your order:" -msgstr "" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "" - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "" - -#: core/validators.py:16 -#, python-brace-format -msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "" diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo deleted file mode 100644 index a8a6ee7b..00000000 Binary files a/core/locale/nl_NL/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/nl_NL/LC_MESSAGES/django.po b/core/locale/nl_NL/LC_MESSAGES/django.po deleted file mode 100644 index aa77a4ec..00000000 --- a/core/locale/nl_NL/LC_MESSAGES/django.po +++ /dev/null @@ -1,2337 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: nl-nl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Uniek ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "Unieke ID wordt gebruikt om elk databaseobject te identificeren" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Is actief" - -#: core/abstract.py:21 -msgid "" -"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" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Gemaakt" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Wanneer het object voor het eerst in de database verscheen" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Gewijzigd" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Wanneer het object voor het laatst bewerkt is" - -#: core/admin.py:55 -msgid "translations" -msgstr "Vertalingen" - -#: core/admin.py:59 -msgid "general" -msgstr "Algemeen" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relaties" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metagegevens" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Tijdstempels" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Activeer geselecteerde %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s met succes geactiveerd!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Deactiveer geselecteerde %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s met succes gedeactiveerd." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Attribuut Waarde" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Attribuutwaarden" - -#: core/admin.py:124 -msgid "image" -msgstr "Afbeelding" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Afbeeldingen" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Voorraad" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Aandelen" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Product bestellen" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Producten bestellen" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Kinderen" - -#: core/admin.py:471 -msgid "Config" -msgstr "Config" - -#: core/apps.py:8 -msgid "core" -msgstr "Kern" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Afgewerkt" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "leveren" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Geleverd" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Geannuleerd" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Mislukt" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "In afwachting van" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Geaccepteerd" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Geld terug" - -#: core/choices.py:17 -msgid "payment" -msgstr "Betaling" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Succesvol" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Cache I/O" - -#: core/docs/drf/views.py:19 -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 "" -"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." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Een lijst met ondersteunde talen opvragen" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Verkrijg de blootstelbare parameters van de applicatie" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Stuur een bericht naar het ondersteuningsteam" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Vraag een CORSed URL op. Alleen https toegestaan." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" -"Eindpunt voor globaal zoeken om in alle tabellen van het project te zoeken" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Een bestelling kopen als bedrijf" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Koop een bestelling in als een bedrijf, met behulp van de meegeleverde " -"`producten` met `product_uuid` en `attributen`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Alle attribuutgroepen weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Een enkele groep kenmerken ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Een attribuutgroep maken" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Een attribuutgroep verwijderen" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Een bestaande attribuutgroep herschrijven en niet-wijzigbare attributen " -"opslaan" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Alle attributen weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Een attribuut maken" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Een attribuut verwijderen" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "" -"Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare " -"velden op te slaan" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Alle attribuutwaarden weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Een waarde voor een enkel kenmerk ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Een attribuutwaarde maken" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Een attribuutwaarde verwijderen" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Een bestaande attribuutwaarde herschrijven waarbij niet-wijzigbare " -"attributen worden opgeslagen" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Alle categorieën weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Een enkele categorie ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Een categorie maken" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Een categorie verwijderen" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " -"velden op te slaan" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Alle categorieën weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Voor niet-personeelsleden worden alleen hun eigen bestellingen geretourneerd." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filter orders met buy_time >= deze ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filter orders met buy_time <= deze ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filter op exacte volgorde UUID" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filter op exacte, door mensen leesbare bestel-ID" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filter op e-mail van gebruiker (hoofdlettergevoelige exacte overeenkomst)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filter op UUID van gebruiker" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "Filter op bestelstatus (hoofdlettergevoelige substringmatch)" - -#: core/docs/drf/viewsets.py:201 -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')." -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')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Een enkele categorie ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Een attribuut maken" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Werkt niet voor gebruikers die geen personeel zijn." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Een attribuut verwijderen" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " -"velden op te slaan" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Aankoopprijs bij bestelling" - -#: core/docs/drf/viewsets.py:233 -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 "" -"Rondt de aankoop van de bestelling af. Als `force_balance` wordt gebruikt, " -"wordt de aankoop afgerond met het saldo van de gebruiker; als " -"`force_payment` wordt gebruikt, wordt een transactie gestart." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "een bestelling kopen zonder een account aan te maken" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "" -"Rondt de aankoop van de bestelling af voor een niet-geregistreerde gebruiker." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Een product aan de bestelling toevoegen" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Voegt een product toe aan een bestelling met de opgegeven `product_uuid` en " -"`attributen`." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "" -"Voeg een lijst met producten toe om te bestellen, hoeveelheden tellen niet " -"mee" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Voegt een lijst met producten toe aan een bestelling met behulp van de " -"opgegeven `product_uuid` en `attributen`." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Een product uit de bestelling verwijderen" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Verwijdert een product uit een bestelling met behulp van de opgegeven " -"`product_uuid` en `attributen`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Verwijder een product uit de bestelling, hoeveelheden tellen niet mee" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Verwijdert een lijst met producten uit een bestelling met behulp van de " -"opgegeven `product_uuid` en `attributen`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Alle attributen weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Voor niet-personeelsleden worden alleen hun eigen verlanglijstjes " -"geretourneerd." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Een attribuut maken" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Werkt niet voor gebruikers die geen personeel zijn." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Een attribuut verwijderen" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "" -"Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare " -"velden op te slaan" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Een product aan de bestelling toevoegen" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Voegt een product toe aan een verlanglijstje met behulp van de opgegeven " -"`product_uuid`." - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Een product uit het verlanglijstje verwijderen" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Verwijdert een product van een verlanglijstje met behulp van de opgegeven " -"`product_uuid`." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Veel producten toevoegen aan het verlanglijstje" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Voegt veel producten toe aan een verlanglijstje met behulp van de opgegeven " -"`product_uuids`." - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Een product uit de bestelling verwijderen" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Verwijdert een groot aantal producten uit een verlanglijstje met behulp van " -"de opgegeven `product_uuids`." - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Voorbeelden: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`." - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Alle producten weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(exacte) UUID van product" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(pictogrammen) Productnaam" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(lijst) Categorienamen, hoofdlettergevoelig" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(exacte) UUID van categorie" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(lijst) Labelnamen, hoofdlettergevoelig" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimale aandelenprijs" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximale aandelenprijs" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(exact) Alleen actieve producten" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Merknaam" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimumvoorraad" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digitaal vs. fysiek" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Een enkel product ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "Product UUID of Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Een product maken" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "" -"Een bestaand product herschrijven met behoud van niet-wijzigbare velden" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Enkele velden van een bestaand product bijwerken, met behoud van niet-" -"wijzigbare velden" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Een product verwijderen" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "somt alle toegestane feedbacks voor een product op" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Vermeld alle adressen" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Een enkel adres ophalen" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Een nieuw adres maken" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Een adres verwijderen" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Een heel adres bijwerken" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Een adres gedeeltelijk bijwerken" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Automatische adresinvoer" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Ruwe gegevensquerystring, gelieve aan te vullen met gegevens van geo-IP " -"eindpunt" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "beperkt de hoeveelheid resultaten, 1 < limiet < 10, standaard: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "alle feedbacks weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "een enkele feedback ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "een feedback creëren" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "een feedback verwijderen" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" -"een bestaande feedback herschrijven waarbij niet-wijzigbare gegevens worden " -"opgeslagen" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " -"velden op te slaan" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "alle order-productrelaties weergeven (eenvoudige weergave)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "een nieuwe bestelling-product relatie maken" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "een bestaande order-productrelatie vervangen" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "een bestaande order-productrelatie gedeeltelijk bijwerken" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "een order-productrelatie verwijderen" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "feedback toevoegen of verwijderen op een order-productrelatie" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Geen zoekterm opgegeven." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Naam" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Categorieën" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Categorieën Naaktslakken" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tags" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Min Prijs" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Maximale prijs" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Is actief" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Merk" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Attributen" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Hoeveelheid" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Slak" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Is digitaal" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Subcategorieën opnemen" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Er moet een categorie_uuid zijn om include_subcategories vlag te gebruiken" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Zoeken (ID, productnaam of onderdeelnummer)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Gekocht na (inclusief)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Eerder gekocht (inclusief)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "E-mail gebruiker" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "Gebruiker UUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "Status" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Menselijk leesbare ID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Ouder" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Hele categorie (heeft minstens 1 product of niet)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Niveau" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "Product UUID" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Sleutel om te zoeken of te plaatsen in de cache" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Gegevens om op te slaan in de cache" - -#: core/graphene/mutations.py:42 -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" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Gecachte gegevens" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Camelized JSON-gegevens van de opgevraagde URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Een product aan de bestelling toevoegen" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Order {order_uuid} niet gevonden" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Een product uit de bestelling verwijderen" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Alle producten uit de bestelling verwijderen" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Een bestelling kopen" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Een actie uitvoeren op een lijst met producten in de bestelling" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Verwijderen/toevoegen" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "De actie moet \"toevoegen\" of \"verwijderen\" zijn!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Een product aan de bestelling toevoegen" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Verlanglijst {wishlist_uuid} niet gevonden" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Een product uit de bestelling verwijderen" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Een product uit de bestelling verwijderen" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Een product uit de bestelling verwijderen" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Een bestelling kopen" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Originele adresstring geleverd door de gebruiker" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} bestaat niet: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Limiet moet tussen 1 en 10 liggen" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - werkt als een charme" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Attributen" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Gegroepeerde kenmerken" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Groepen van kenmerken" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Categorieën" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Merken" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Categorieën" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Opwaarderingspercentage" - -#: core/graphene/object_types.py:129 -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." - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "" -"Minimale en maximale prijzen voor producten in deze categorie, indien " -"beschikbaar." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tags voor deze categorie" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Producten in deze categorie" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Verkopers" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Breedtegraad (Y-coördinaat)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Lengtegraad (X-coördinaat)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Hoe" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Vertegenwoordigt feedback van een gebruiker." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Meldingen" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Download url voor dit bestelproduct indien van toepassing" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Een lijst met bestelde producten in deze bestelling" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Factuuradres" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Verzendadres voor deze bestelling, leeg laten als dit hetzelfde is als het " -"factuuradres of als dit niet van toepassing is" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Totale prijs van deze bestelling" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Totale hoeveelheid producten in bestelling" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Zijn alle producten in de bestelling digitaal" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Bestellingen" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Afbeelding URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Afbeeldingen van het product" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Categorie" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Reacties" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Merk" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Attribuutgroepen" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Prijs" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Hoeveelheid" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Aantal terugkoppelingen" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Producten" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Promocodes" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Producten te koop" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promoties" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Verkoper" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Product" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Gewenste producten" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Verlanglijst" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Getagde producten" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Product tags" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Getagde categorieën" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Categorieën' tags" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Naam project" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Bedrijf E-mail" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Bedrijfsnaam" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Adres" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Telefoonnummer bedrijf" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Gebruiker e-mail hosten" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Maximumbedrag voor betaling" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Minimumbedrag voor betaling" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Analytics-gegevens" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Advertentiegegevens" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configuratie" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Taalcode" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Naam van de taal" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Taalvlag, indien aanwezig :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Een lijst met ondersteunde talen opvragen" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Producten zoekresultaten" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Zoekresultaten" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Ouder van deze groep" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Ouderattribuutgroep" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Naam attribuutgroep" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Attribuutgroep" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Slaat referenties en eindpunten op die vereist zijn voor API-communicatie " -"van de verkoper" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Authenticatie-info" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "" -"Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Verkoper winstpercentage" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Naam van deze verkoper" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Naam verkoper" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Interne tagidentifier voor de producttag" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Tag naam" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Gebruiksvriendelijke naam voor de producttag" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Tag weergavenaam" - -#: core/models.py:213 -msgid "product tag" -msgstr "Productlabel" - -#: core/models.py:251 -msgid "category tag" -msgstr "categorie tag" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "categorie tags" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Upload een afbeelding die deze categorie vertegenwoordigt" - -#: core/models.py:332 -msgid "category image" -msgstr "Categorie afbeelding" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Definieer een toeslagpercentage voor producten in deze categorie" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Ouder van deze categorie om een hiërarchische structuur te vormen" - -#: core/models.py:347 -msgid "parent category" -msgstr "Oudercategorie" - -#: core/models.py:352 -msgid "category name" -msgstr "Naam categorie" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Geef deze categorie een naam" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" - -#: core/models.py:361 -msgid "category description" -msgstr "Categorie beschrijving" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "tags die deze categorie helpen beschrijven of groeperen" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Prioriteit" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Naam van dit merk" - -#: core/models.py:430 -msgid "brand name" -msgstr "Merknaam" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Upload een logo dat dit merk vertegenwoordigt" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Klein merkimago" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Upload een groot logo dat dit merk vertegenwoordigt" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Groot merkimago" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Een gedetailleerde beschrijving van het merk toevoegen" - -#: core/models.py:453 -msgid "brand description" -msgstr "Merknaam" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Categorieën" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Categorie waartoe dit product behoort" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Dit product optioneel koppelen aan een merk" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tags die dit product helpen beschrijven of groeperen" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Geeft aan of dit product digitaal wordt geleverd" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Is product digitaal" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Zorg voor een duidelijke identificerende naam voor het product" - -#: core/models.py:556 -msgid "product name" -msgstr "Naam product" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Voeg een gedetailleerde beschrijving van het product toe" - -#: core/models.py:562 -msgid "product description" -msgstr "Productbeschrijving" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Onderdeelnummer voor dit product" - -#: core/models.py:570 -msgid "part number" -msgstr "Onderdeelnummer" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Categorie van dit kenmerk" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Groep van dit kenmerk" - -#: core/models.py:690 -msgid "string" -msgstr "String" - -#: core/models.py:691 -msgid "integer" -msgstr "Integer" - -#: core/models.py:692 -msgid "float" -msgstr "Vlotter" - -#: core/models.py:693 -msgid "boolean" -msgstr "Booleaans" - -#: core/models.py:694 -msgid "array" -msgstr "Array" - -#: core/models.py:695 -msgid "object" -msgstr "Object" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Type waarde van het kenmerk" - -#: core/models.py:698 -msgid "value type" -msgstr "Waardetype" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Naam van dit kenmerk" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Naam attribuut" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Attribuut" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Attribuut van deze waarde" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Bijbehorend product" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "De specifieke waarde voor dit kenmerk" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Alt-tekst afbeelding" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Upload het afbeeldingsbestand voor dit product" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Product afbeelding" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" - -#: core/models.py:806 -msgid "display priority" -msgstr "Prioriteit weergeven" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Het product dat deze afbeelding vertegenwoordigt" - -#: core/models.py:825 -msgid "product images" -msgstr "Product afbeeldingen" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Kortingspercentage voor de geselecteerde producten" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Kortingspercentage" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Geef deze promotie een unieke naam" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Naam promotie" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Promotie beschrijving" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Selecteer welke producten onder deze promotie vallen" - -#: core/models.py:885 -msgid "included products" -msgstr "Meegeleverde producten" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promotie" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "De verkoper die dit product levert" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Geassocieerde verkoper" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Eindprijs voor de klant na winstmarges" - -#: core/models.py:930 -msgid "selling price" -msgstr "Verkoopprijs" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Het product dat bij deze voorraadvermelding hoort" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "De prijs die voor dit product aan de verkoper is betaald" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Aankoopprijs verkoper" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Beschikbare hoeveelheid van het product in voorraad" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Hoeveelheid op voorraad" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "Door de verkoper toegewezen SKU om het product te identificeren" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "Verkoper SKU" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" - -#: core/models.py:961 -msgid "digital file" -msgstr "Digitaal bestand" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Voorraadboekingen" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Gebruiker die eigenaar is van deze verlanglijst" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Eigenaar verlanglijstje" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Verlanglijst" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} bestaat niet: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documentaire" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentaires" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Onopgelost" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Adresregel voor de klant" - -#: core/models.py:1129 -msgid "address line" -msgstr "Adresregel" - -#: core/models.py:1131 -msgid "street" -msgstr "Straat" - -#: core/models.py:1132 -msgid "district" -msgstr "District" - -#: core/models.py:1133 -msgid "city" -msgstr "Stad" - -#: core/models.py:1134 -msgid "region" -msgstr "Regio" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Postcode" - -#: core/models.py:1136 -msgid "country" -msgstr "Land" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Volledig JSON-antwoord van geocoder voor dit adres" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" - -#: core/models.py:1159 -msgid "address" -msgstr "Adres" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adressen" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Unieke code die een gebruiker gebruikt om een korting te verzilveren" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Promo code identificatie" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "" -"Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Vast kortingsbedrag" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "" -"Kortingspercentage dat wordt toegepast als het vaste bedrag niet wordt " -"gebruikt" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Kortingspercentage" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Tijdstempel wanneer de promocode verloopt" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Geldigheidsduur einde" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Begin geldigheidsduur" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet gebruikt" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Gebruik tijdstempel" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Toegewezen gebruiker" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Kortingscode" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Actiecodes" - -#: core/models.py:1260 -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." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Promocode is al gebruikt" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Ongeldig kortingstype voor promocode {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "Het factuuradres dat voor deze bestelling is gebruikt" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Optionele promotiecode toegepast op deze bestelling" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Kortingscode toegepast" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "Het verzendadres dat voor deze bestelling is gebruikt" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Verzendadres" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Huidige status van de order in zijn levenscyclus" - -#: core/models.py:1349 -msgid "order status" -msgstr "Bestelstatus" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"JSON-structuur van meldingen om weer te geven aan gebruikers, in admin UI " -"wordt de tabelweergave gebruikt" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "JSON-weergave van bestelattributen voor deze bestelling" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "De gebruiker die de bestelling heeft geplaatst" - -#: core/models.py:1367 -msgid "user" -msgstr "Gebruiker" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "De tijdstempel waarop de bestelling is afgerond" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Tijd kopen" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Een menselijk leesbare identificatiecode voor de bestelling" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "menselijk leesbare ID" - -#: core/models.py:1388 -msgid "order" -msgstr "Bestel" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Een gebruiker mag maar één lopende order tegelijk hebben!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "" -"U kunt geen producten toevoegen aan een bestelling die niet in behandeling " -"is." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" -"U kunt geen producten verwijderen uit een bestelling die niet in behandeling " -"is." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} bestaat niet met query <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Promocode bestaat niet" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Adres bestaat niet" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"U kunt op dit moment niet kopen. Probeer het over een paar minuten nog eens." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Ongeldige krachtwaarde" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Je kunt geen lege bestelling kopen!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Onvoldoende fondsen om de bestelling te voltooien" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"u niet kunt kopen zonder registratie, geef dan de volgende informatie: " -"klantnaam, e-mail klant, telefoonnummer klant" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Ongeldige betalingsmethode: {payment_method} van {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "De prijs die de klant bij aankoop voor dit product heeft betaald" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Aankoopprijs bij bestelling" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Interne opmerkingen voor beheerders over dit bestelde product" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Interne opmerkingen" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Meldingen van gebruikers" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "JSON weergave van de attributen van dit item" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Geordende producteigenschappen" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Ouderlijk bevel" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Het specifieke product dat bij deze bestelregel hoort" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Hoeveelheid van dit specifieke product in de bestelling" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Hoeveelheid product" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Huidige status van dit product in de bestelling" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Status productlijn" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "verkeerde actie opgegeven voor feedback: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" -"U kunt geen producten verwijderen uit een bestelling die niet in behandeling " -"is." - -#: core/models.py:1882 -msgid "download" -msgstr "Downloaden" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Downloads" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"U kunt geen digitale activa downloaden voor een niet-afgeronde bestelling" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Opmerkingen van gebruikers over hun ervaring met het product" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Reacties" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Verwijst naar het specifieke product in een bestelling waar deze feedback " -"over gaat" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Gerelateerd product bestellen" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Door de gebruiker toegekende waardering voor het product" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Productbeoordeling" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Feedback" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"Om feedback toe te voegen, moet je een opmerking, beoordeling en " -"productidentificatie opgeven." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Fout tijdens aanmaken promocode: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Orderbevestiging" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Hallo %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Hartelijk dank voor uw bestelling #%(order.pk)s! We zijn blij om u te " -"informeren dat we uw bestelling in behandeling hebben genomen. Hieronder " -"vindt u de gegevens van uw bestelling:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Totaal" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Totale prijs" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Als je vragen hebt, neem dan gerust contact op met onze ondersteuning op " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Vriendelijke groeten,
het %(config.PROJECT_NAME)s-team" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Alle rechten voorbehouden" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Bestelling geleverd" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Hallo %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"We hebben uw bestelling succesvol verwerkt №%(order_uuid)s! Hieronder vindt " -"u de details van uw bestelling:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"aanvullende\n" -" informatie" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Waarde" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"Als je vragen hebt, kun je contact opnemen met onze klantenservice op " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Vriendelijke groeten,
het %(project_name)s-team" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Sleutel" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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. " -"Hieronder vindt u de gegevens van uw bestelling:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Verzendprijs" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Je bestelling wordt afgeleverd op het volgende adres:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Vriendelijke groeten,
het %(config.PROJECT_NAME)s-team" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"alle rechten\n" -" voorbehouden" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Zowel gegevens als time-out zijn vereist" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} moet model zijn" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} moet een lijstobject zijn" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Neem contact met ons op" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME}. | Orderbevestiging" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME}. | Geleverd" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "U hebt geen toestemming om deze actie uit te voeren." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "De parameter NOMINATIM_URL moet worden geconfigureerd!" - -#: core/validators.py:16 -#, python-brace-format -msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" -"Afbeeldingsafmetingen mogen niet groter zijn dan w{max_width} x " -"h{max_height} pixels" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Ongeldig formaat telefoonnummer" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "U kunt het digitale goed maar één keer downloaden" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon niet gevonden" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Fout bij geocodering: {e}" diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo deleted file mode 100644 index 50475887..00000000 Binary files a/core/locale/pl_PL/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/pl_PL/LC_MESSAGES/django.po b/core/locale/pl_PL/LC_MESSAGES/django.po deleted file mode 100644 index 6ce27b6d..00000000 --- a/core/locale/pl_PL/LC_MESSAGES/django.po +++ /dev/null @@ -1,2332 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: pl-pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Unikalny identyfikator" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"Unikalny identyfikator służy do jednoznacznej identyfikacji dowolnego " -"obiektu bazy danych" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Jest aktywny" - -#: core/abstract.py:21 -msgid "" -"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ń." - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Utworzony" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Kiedy obiekt po raz pierwszy pojawił się w bazie danych" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Zmodyfikowany" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Kiedy obiekt był ostatnio edytowany" - -#: core/admin.py:55 -msgid "translations" -msgstr "Tłumaczenia" - -#: core/admin.py:59 -msgid "general" -msgstr "Ogólne" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relacje" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadane" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Znaczniki czasu" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Aktywuj wybrane %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s aktywowany pomyślnie!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Dezaktywacja wybranych %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "Funkcja %(verbose_name_plural)s została pomyślnie dezaktywowana." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Wartość atrybutu" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Wartości atrybutów" - -#: core/admin.py:124 -msgid "image" -msgstr "Obraz" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Obrazy" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stan magazynowy" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Akcje" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Zamów produkt" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Zamawianie produktów" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Dzieci" - -#: core/admin.py:471 -msgid "Config" -msgstr "Konfiguracja" - -#: core/apps.py:8 -msgid "core" -msgstr "Rdzeń" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Zakończony" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Dostarczanie" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Dostarczone" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Anulowane" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Nie powiodło się" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "W toku" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Przyjęte" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Zwrócone pieniądze" - -#: core/choices.py:17 -msgid "payment" -msgstr "Płatność" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Udany" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Pamięć podręczna we/wy" - -#: core/docs/drf/views.py:19 -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 "" -"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." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Pobierz listę obsługiwanych języków" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Uzyskaj dostępne parametry aplikacji" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Wyślij wiadomość do zespołu wsparcia" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Żądanie adresu URL CORSed. Dozwolony jest tylko protokół https." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "Globalny punkt końcowy wyszukiwania do zapytań w tabelach projektu" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Zakup zamówienia jako firma" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Kup zamówienie jako firma, używając dostarczonych `products` z " -"`product_uuid` i `attributes`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Lista wszystkich grup atrybutów (widok prosty)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Pobieranie pojedynczej grupy atrybutów (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Tworzenie grupy atrybutów" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Usuwanie grupy atrybutów" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Przepisanie istniejącej grupy atrybutów z zachowaniem atrybutów " -"nieedytowalnych" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Lista wszystkich atrybutów (widok prosty)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Utwórz atrybut" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Usuwanie atrybutu" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "" -"Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów " -"nieedytowalnych" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Lista wszystkich wartości atrybutów (widok prosty)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Pobieranie wartości pojedynczego atrybutu (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Tworzenie wartości atrybutu" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Usuwanie wartości atrybutu" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Przepisanie istniejącej wartości atrybutu z zachowaniem atrybutów " -"nieedytowalnych" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Lista wszystkich kategorii (widok prosty)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Utwórz kategorię" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Usuwanie kategorii" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " -"nieedytowalne" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Lista wszystkich kategorii (widok prosty)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"W przypadku użytkowników niebędących pracownikami zwracane są tylko ich " -"własne zamówienia." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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." - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtruj zamówienia z buy_time >= ta data ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtruj zamówienia z buy_time <= ten ISO 8601 datetime" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtruj według dokładnego identyfikatora UUID zamówienia" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "" -"Filtrowanie według dokładnego, czytelnego dla człowieka identyfikatora " -"zamówienia" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filtrowanie według adresu e-mail użytkownika (dokładne dopasowanie z " -"uwzględnieniem wielkości liter)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrowanie według identyfikatora UUID użytkownika" - -#: core/docs/drf/viewsets.py:195 -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)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"Kolejność według jednego z: uuid, human_readable_id, user_email, user, " -"status, created, modified, buy_time, random. Prefiks z \"-\" dla malejącego " -"(np. \"-buy_time\")." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Utwórz atrybut" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Nie działa dla użytkowników spoza personelu." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Usuwanie atrybutu" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " -"nieedytowalne" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Cena zakupu w momencie zamówienia" - -#: core/docs/drf/viewsets.py:233 -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 "" -"Finalizuje zakup zamówienia. Jeśli użyto `force_balance`, zakup jest " -"finalizowany przy użyciu salda użytkownika; Jeśli użyto `force_payment`, " -"transakcja jest inicjowana." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "zakup zamówienia bez tworzenia konta" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finalizuje zakup zamówienia dla niezarejestrowanego użytkownika." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Dodawanie produktu do zamówienia" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Dodaje produkt do zamówienia przy użyciu podanych `product_uuid` i " -"`attributes`." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Dodaj listę produktów do zamówienia, ilości nie będą liczone." - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Dodaje listę produktów do zamówienia przy użyciu podanych `product_uuid` i " -"`attributes`." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Usunięcie produktu z zamówienia" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Usuwa produkt z zamówienia przy użyciu podanego `product_uuid` i " -"`attributes`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Usuń produkt z zamówienia, ilości nie będą liczone" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Usuwa listę produktów z zamówienia przy użyciu podanych `product_uuid` i " -"`attributes`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Lista wszystkich atrybutów (widok prosty)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"W przypadku użytkowników niebędących pracownikami zwracane są tylko ich " -"własne listy życzeń." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Utwórz atrybut" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Nie działa dla użytkowników spoza personelu." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Usuwanie atrybutu" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "" -"Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów " -"nieedytowalnych" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Dodawanie produktu do zamówienia" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "Dodaje produkt do listy życzeń używając podanego `product_uuid`" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Usunięcie produktu z listy życzeń" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Usuwa produkt z listy życzeń przy użyciu podanego identyfikatora " -"`product_uuid`." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Dodaj wiele produktów do listy życzeń" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Dodaje wiele produktów do listy życzeń przy użyciu podanych `product_uuids`" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Usunięcie produktu z zamówienia" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Usuwa wiele produktów z listy życzeń przy użyciu podanych `product_uuids`" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Przykłady: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Lista wszystkich produktów (widok prosty)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(dokładny) UUID produktu" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(ikony) Nazwa produktu" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(lista) Nazwy kategorii, wielkość liter nie ma znaczenia" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(dokładny) UUID kategorii" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(lista) Nazwy tagów, wielkość liter nie ma znaczenia" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimalna cena akcji" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maksymalna cena akcji" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(dokładnie) Tylko aktywne produkty" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Nazwa marki" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimalna ilość zapasów" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(dokładnie) Cyfrowe vs. fizyczne" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Dozwolone:** uuid, rating, name, slug, created, modified, price, random" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Pobieranie pojedynczego produktu (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "UUID produktu lub Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Tworzenie produktu" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Przepisz istniejący produkt, zachowując nieedytowalne pola" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Aktualizacja niektórych pól istniejącego produktu z zachowaniem pól " -"nieedytowalnych" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Usuń produkt" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "wyświetla wszystkie dozwolone informacje zwrotne dotyczące produktu" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Lista wszystkich adresów" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Pobieranie pojedynczego adresu" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Utwórz nowy adres" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Usuwanie adresu" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Aktualizacja całego adresu" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Częściowa aktualizacja adresu" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Wprowadzanie adresu w trybie autouzupełniania" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Ciąg zapytania danych nieprzetworzonych, należy dołączyć dane z punktu " -"końcowego geo-IP" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "ogranicza ilość wyników, 1 < limit < 10, domyślnie: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "lista wszystkich opinii (widok prosty)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "pobieranie pojedynczej informacji zwrotnej (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "utworzyć informację zwrotną" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "usuwanie opinii" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" -"przepisanie istniejącej informacji zwrotnej z zachowaniem elementów " -"nieedytowalnych" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " -"nieedytowalne" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "lista wszystkich relacji zamówienie-produkt (widok prosty)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "pobranie pojedynczej relacji zamówienie-produkt (widok szczegółowy)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "utworzyć nową relację zamówienie-produkt" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "zastąpić istniejącą relację zamówienie-produkt" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "częściowa aktualizacja istniejącej relacji zamówienie-produkt" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "usunąć relację zamówienie-produkt" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Nie podano wyszukiwanego hasła." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Nazwa" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Kategorie" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Kategorie Ślimaki" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tagi" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Cena minimalna" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Maksymalna cena" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Jest aktywny" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Marka" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Atrybuty" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Ilość" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Ślimak" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Czy cyfrowy" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Uwzględnienie podkategorii" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "Aby użyć flagi include_subcategories, musi istnieć category_uuid" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Kupione po (włącznie)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Kupione wcześniej (włącznie)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "E-mail użytkownika" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID użytkownika" - -#: core/filters.py:289 -msgid "Status" -msgstr "Status" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Identyfikator czytelny dla człowieka" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Rodzic" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Poziom" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID produktu" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Klucz do wyszukania lub ustawienia w pamięci podręcznej" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Dane do przechowywania w pamięci podręcznej" - -#: core/graphene/mutations.py:42 -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" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Dane w pamięci podręcznej" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Kamelizowane dane JSON z żądanego adresu URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Dodawanie produktu do zamówienia" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Nie znaleziono zamówienia {order_uuid}" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Usunięcie produktu z zamówienia" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Usuń wszystkie produkty z zamówienia" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Kup zamówienie" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Wykonanie akcji na liście produktów w zamówieniu" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Usuń/Dodaj" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Akcją musi być \"dodaj\" lub \"usuń\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Dodawanie produktu do zamówienia" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Lista życzeń {wishlist_uuid} nie została znaleziona" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Usunięcie produktu z zamówienia" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Usunięcie produktu z zamówienia" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Usunięcie produktu z zamówienia" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Kup zamówienie" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Oryginalny ciąg adresu podany przez użytkownika" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} nie istnieje: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Limit musi wynosić od 1 do 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - działa jak urok" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Atrybuty" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Atrybuty pogrupowane" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Grupy atrybutów" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Kategorie" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Marki" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Kategorie" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Procentowy narzut" - -#: core/graphene/object_types.py:129 -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." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tagi dla tej kategorii" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Produkty w tej kategorii" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Sprzedawcy" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Szerokość geograficzna (współrzędna Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Długość geograficzna (współrzędna X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Jak" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Reprezentuje informacje zwrotne od użytkownika." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Powiadomienia" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Adres URL pobierania dla tego produktu zamówienia, jeśli dotyczy" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Lista zamówionych produktów w tym zamówieniu" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Adres rozliczeniowy" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Adres wysyłki dla tego zamówienia, pozostaw pusty, jeśli jest taki sam jak " -"adres rozliczeniowy lub jeśli nie dotyczy" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Całkowita cena tego zamówienia" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Całkowita ilość produktów w zamówieniu" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Zamówienia" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "Adres URL obrazu" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Zdjęcia produktu" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Kategoria" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Informacje zwrotne" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Marka" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Grupy atrybutów" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Cena" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Ilość" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Liczba informacji zwrotnych" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Produkty" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Promocodes" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Produkty w sprzedaży" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promocje" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Sprzedawca" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Produkt" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Produkty z listy życzeń" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Listy życzeń" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Produkty Tagged" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Tagi produktu" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Kategorie oznaczone tagami" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Tagi kategorii" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Nazwa projektu" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Firmowy adres e-mail" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Nazwa firmy" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Adres firmy" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Numer telefonu firmy" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Użytkownik hosta poczty e-mail" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Maksymalna kwota płatności" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Minimalna kwota płatności" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Dane analityczne" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Dane reklamowe" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Konfiguracja" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Kod języka" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Nazwa języka" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Flaga języka, jeśli istnieje :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Pobierz listę obsługiwanych języków" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Wyniki wyszukiwania produktów" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Wyniki wyszukiwania produktów" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Rodzic tej grupy" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Grupa atrybutów nadrzędnych" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Nazwa grupy atrybutów" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Grupa atrybutów" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji " -"API dostawcy." - -#: core/models.py:148 -msgid "authentication info" -msgstr "Informacje o uwierzytelnianiu" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Procentowa marża sprzedawcy" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Nazwa tego sprzedawcy" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Nazwa sprzedawcy" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Wewnętrzny identyfikator tagu produktu" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Nazwa tagu" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Wyświetlana nazwa znacznika" - -#: core/models.py:213 -msgid "product tag" -msgstr "Etykieta produktu" - -#: core/models.py:251 -msgid "category tag" -msgstr "tag kategorii" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "tagi kategorii" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Prześlij obraz reprezentujący tę kategorię" - -#: core/models.py:332 -msgid "category image" -msgstr "Obraz kategorii" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii." - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej" - -#: core/models.py:347 -msgid "parent category" -msgstr "Kategoria nadrzędna" - -#: core/models.py:352 -msgid "category name" -msgstr "Nazwa kategorii" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Podaj nazwę dla tej kategorii" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Dodaj szczegółowy opis dla tej kategorii" - -#: core/models.py:361 -msgid "category description" -msgstr "Opis kategorii" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Priorytet" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Nazwa tej marki" - -#: core/models.py:430 -msgid "brand name" -msgstr "Nazwa marki" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Prześlij logo reprezentujące tę markę" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Mały wizerunek marki" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Prześlij duże logo reprezentujące tę markę" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Duży wizerunek marki" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Dodaj szczegółowy opis marki" - -#: core/models.py:453 -msgid "brand description" -msgstr "Opis marki" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Kategorie" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Kategoria, do której należy ten produkt" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Opcjonalnie można powiązać ten produkt z marką" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." - -#: core/models.py:549 -msgid "is product digital" -msgstr "Czy produkt jest cyfrowy?" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Wyraźna nazwa identyfikująca produkt" - -#: core/models.py:556 -msgid "product name" -msgstr "Nazwa produktu" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Dodaj szczegółowy opis produktu" - -#: core/models.py:562 -msgid "product description" -msgstr "Opis produktu" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Numer części dla tego produktu" - -#: core/models.py:570 -msgid "part number" -msgstr "Numer części" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Kategoria tego atrybutu" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Grupa tego atrybutu" - -#: core/models.py:690 -msgid "string" -msgstr "String" - -#: core/models.py:691 -msgid "integer" -msgstr "Integer" - -#: core/models.py:692 -msgid "float" -msgstr "Pływak" - -#: core/models.py:693 -msgid "boolean" -msgstr "Wartość logiczna" - -#: core/models.py:694 -msgid "array" -msgstr "Tablica" - -#: core/models.py:695 -msgid "object" -msgstr "Obiekt" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Typ wartości atrybutu" - -#: core/models.py:698 -msgid "value type" -msgstr "Typ wartości" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Nazwa tego atrybutu" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Nazwa atrybutu" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Atrybut" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Atrybut tej wartości" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Konkretny produkt powiązany z wartością tego atrybutu" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Produkt powiązany" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "Konkretna wartość dla tego atrybutu" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Tekst alternatywny obrazu" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Prześlij plik obrazu dla tego produktu" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Obraz produktu" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Określa kolejność wyświetlania obrazów" - -#: core/models.py:806 -msgid "display priority" -msgstr "Priorytet wyświetlania" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Produkt, który przedstawia ten obraz" - -#: core/models.py:825 -msgid "product images" -msgstr "Zdjęcia produktów" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Rabat procentowy na wybrane produkty" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Procent rabatu" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Podaj unikalną nazwę tej promocji" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Nazwa promocji" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Opis promocji" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Wybierz produkty objęte promocją" - -#: core/models.py:885 -msgid "included products" -msgstr "Dołączone produkty" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promocja" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Sprzedawca dostarczający ten produkt" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Powiązany sprzedawca" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" - -#: core/models.py:930 -msgid "selling price" -msgstr "Cena sprzedaży" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Produkt powiązany z tym wpisem magazynowym" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Cena zapłacona sprzedawcy za ten produkt" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Cena zakupu przez sprzedawcę" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Dostępna ilość produktu w magazynie" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Ilość w magazynie" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU sprzedawcy" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" - -#: core/models.py:961 -msgid "digital file" -msgstr "Plik cyfrowy" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Zapisy magazynowe" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Użytkownik posiadający tę listę życzeń" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Właściciel listy życzeń" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Lista życzeń" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} nie istnieje: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Film dokumentalny" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Filmy dokumentalne" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Nierozwiązany" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Linia adresu dla klienta" - -#: core/models.py:1129 -msgid "address line" -msgstr "Linia adresowa" - -#: core/models.py:1131 -msgid "street" -msgstr "ul." - -#: core/models.py:1132 -msgid "district" -msgstr "Okręg" - -#: core/models.py:1133 -msgid "city" -msgstr "Miasto" - -#: core/models.py:1134 -msgid "region" -msgstr "Region" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Kod pocztowy" - -#: core/models.py:1136 -msgid "country" -msgstr "Kraj" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Geolocation Point(Longitude, Latitude)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" - -#: core/models.py:1159 -msgid "address" -msgstr "Adres" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adresy" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Unikalny kod używany przez użytkownika do realizacji rabatu." - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Identyfikator kodu promocyjnego" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Stała kwota rabatu stosowana, jeśli procent nie jest używany" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Stała kwota rabatu" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Rabat procentowy" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Końcowy czas ważności" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Czas rozpoczęcia ważności" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Znacznik czasu użycia kodu promocyjnego, pusty, jeśli nie został jeszcze " -"użyty." - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Znacznik czasu użycia" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Przypisany użytkownik" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Kod promocyjny" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Kody promocyjne" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " -"nie oba lub żaden z nich." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Kod promocyjny został już wykorzystany" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}." - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "Adres rozliczeniowy użyty dla tego zamówienia" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Zastosowany kod promocyjny" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "Adres wysyłki użyty dla tego zamówienia" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Adres wysyłki" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Aktualny status zamówienia w jego cyklu życia" - -#: core/models.py:1349 -msgid "order status" -msgstr "Status zamówienia" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"Struktura JSON powiadomień do wyświetlenia użytkownikom, w interfejsie " -"administratora używany jest widok tabeli" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "Użytkownik, który złożył zamówienie" - -#: core/models.py:1367 -msgid "user" -msgstr "Użytkownik" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Kup czas" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Czytelny dla człowieka identyfikator zamówienia" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "Identyfikator czytelny dla człowieka" - -#: core/models.py:1388 -msgid "order" -msgstr "Zamówienie" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Użytkownik może mieć tylko jedno oczekujące zlecenie w danym momencie!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "" -"Nie można dodać produktów do zamówienia, które nie jest zamówieniem " -"oczekującym." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Nie można dodać nieaktywnych produktów do zamówienia" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "Nie można dodać więcej produktów niż jest dostępnych w magazynie" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" -"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " -"oczekującym." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} nie istnieje z zapytaniem <{query}>." - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Kod promocyjny nie istnieje" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "Możesz kupować tylko produkty fizyczne z podanym adresem wysyłki!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Adres nie istnieje" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"W tej chwili nie możesz dokonać zakupu, spróbuj ponownie za kilka minut." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Nieprawidłowa wartość siły" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Nie można kupić pustego zamówienia!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Niewystarczające środki do zrealizowania zamówienia" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"Nie można dokonać zakupu bez rejestracji, należy podać następujące " -"informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " -"klienta." - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Nieprawidłowa metoda płatności: {payment_method} z " -"{available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "Cena zapłacona przez klienta za ten produkt w momencie zakupu." - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Cena zakupu w momencie zamówienia" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "" -"Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego produktu" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Uwagi wewnętrzne" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Powiadomienia użytkownika" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "Reprezentacja JSON atrybutów tego elementu" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Zamówione atrybuty produktu" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Zamówienie nadrzędne" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Konkretny produkt powiązany z tą linią zamówienia" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Ilość tego konkretnego produktu w zamówieniu" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Ilość produktu" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Aktualny status tego produktu w zamówieniu" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Status linii produktów" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "nieprawidłowe działanie określone dla informacji zwrotnej: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" -"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " -"oczekującym." - -#: core/models.py:1882 -msgid "download" -msgstr "Pobierz" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Pliki do pobrania" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Nie można pobrać zasobu cyfrowego dla nieukończonego zamówienia." - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Komentarze użytkowników na temat ich doświadczeń z produktem" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Komentarze zwrotne" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Odnosi się do konkretnego produktu w zamówieniu, którego dotyczy ta " -"informacja zwrotna." - -#: core/models.py:1930 -msgid "related order product" -msgstr "Powiązany produkt zamówienia" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Ocena produktu przypisana przez użytkownika" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Ocena produktu" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Informacje zwrotne" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"Aby dodać opinię, należy podać komentarz, ocenę i identyfikator produktu " -"zamówienia." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Błąd podczas tworzenia kodu promocyjnego: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Potwierdzenie zamówienia" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Witam %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Dziękujemy za zamówienie #%(order.pk)s! Z przyjemnością informujemy, że " -"przyjęliśmy Twoje zamówienie do realizacji. Poniżej znajdują się szczegóły " -"zamówienia:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Łącznie" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Cena całkowita" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy " -"technicznej pod adresem %(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Z wyrazami szacunku,
zespół %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Wszelkie prawa zastrzeżone" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Zamówienie dostarczone" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Witaj %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -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:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"dodatkowe\n" -" informacje" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Wartość" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -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 %(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Z wyrazami szacunku,
zespół %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Klucz" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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 " -"znajdują się szczegóły zamówienia:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Cena wysyłki" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Zamówienie zostanie dostarczone pod następujący adres:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Z wyrazami szacunku, zespół %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"wszelkie prawa\n" -" zastrzeżone" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Wymagane są zarówno dane, jak i limit czasu" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "" -"Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do " -"216000 sekund." - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} musi być modelem" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} musi być obiektem listy" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Kontakt zainicjowany" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Potwierdzenie zamówienia" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Zamówienie dostarczone" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "Nie masz uprawnień do wykonania tej akcji." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Parametr NOMINATIM_URL musi być skonfigurowany!" - -#: core/validators.py:16 -#, python-brace-format -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." - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Nieprawidłowy format numeru telefonu" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Zasób cyfrowy można pobrać tylko raz" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "nie znaleziono favicon" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Błąd geokodowania: {e}" diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo deleted file mode 100644 index a97749b1..00000000 Binary files a/core/locale/pt_BR/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/pt_BR/LC_MESSAGES/django.po b/core/locale/pt_BR/LC_MESSAGES/django.po deleted file mode 100644 index ead07f72..00000000 --- a/core/locale/pt_BR/LC_MESSAGES/django.po +++ /dev/null @@ -1,2320 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: pt-br\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "ID exclusivo" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"O ID exclusivo é usado para identificar com segurança qualquer objeto do " -"banco de dados" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Está ativo" - -#: core/abstract.py:21 -msgid "" -"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" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Criado" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Quando o objeto apareceu pela primeira vez no banco de dados" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modificado" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Quando o objeto foi editado pela última vez" - -#: core/admin.py:55 -msgid "translations" -msgstr "Traduções" - -#: core/admin.py:59 -msgid "general" -msgstr "Geral" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relações" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadados" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Carimbos de data/hora" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Ativar %(verbose_name_plural)s selecionados" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s ativado com sucesso!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Desativar %(verbose_name_plural)s selecionados" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s desativado com sucesso." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Valor do atributo" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Valores de atributos" - -#: core/admin.py:124 -msgid "image" -msgstr "Imagem" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Imagens" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Estoque" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Ações" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Pedido de produto" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Solicitar produtos" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Crianças" - -#: core/admin.py:471 -msgid "Config" -msgstr "Configuração" - -#: core/apps.py:8 -msgid "core" -msgstr "Core" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Finalizado" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Entregando" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Entregue" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Cancelado" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Falha" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "Pendente" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Aceito" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Dinheiro devolvido" - -#: core/choices.py:17 -msgid "payment" -msgstr "Pagamento" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "Bem-sucedido" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "E/S do cache" - -#: core/docs/drf/views.py:19 -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 "" -"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." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Obter uma lista de idiomas suportados" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Obter os parâmetros expostos do aplicativo" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Envie uma mensagem para a equipe de suporte" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Solicite um URL com CORS. Somente https é permitido." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" -"Ponto de extremidade de pesquisa global para consultar as tabelas do projeto" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Comprar um pedido como uma empresa" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Compre um pedido como uma empresa, usando os `products` fornecidos com " -"`product_uuid` e `attributes`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Listar todos os grupos de atributos (visualização simples)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Recuperar um único grupo de atributos (visualização detalhada)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Criar um grupo de atributos" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Excluir um grupo de atributos" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "Reescrever um grupo de atributos existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Listar todos os atributos (visualização simples)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Recuperar um único atributo (visualização detalhada)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Criar um atributo" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Excluir um atributo" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Reescreva um atributo existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Reescreva alguns campos de um atributo existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Listar todos os valores de atributos (visualização simples)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Recuperar um único valor de atributo (visualização detalhada)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Criar um valor de atributo" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Excluir um valor de atributo" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "Reescreva um valor de atributo existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Listar todas as categorias (visualização simples)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Recuperar uma única categoria (visualização detalhada)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Criar uma categoria" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Excluir uma categoria" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Reescrever uma categoria existente salvando itens não editáveis" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Reescreva alguns campos de uma categoria existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Listar todas as categorias (visualização simples)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Para usuários não funcionários, apenas seus próprios pedidos são devolvidos." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtrar pedidos com buy_time >= este datetime ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtrar pedidos com buy_time <= este datetime ISO 8601" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtrar por UUID de ordem exata" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtrar por ID exata do pedido legível por humanos" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filtrar por e-mail do usuário (correspondência exata sem distinção entre " -"maiúsculas e minúsculas)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrar por UUID do usuário" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Filtrar por status do pedido (correspondência de substring sem distinção " -"entre maiúsculas e minúsculas)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"Ordene por uma das seguintes opções: uuid, human_readable_id, user_email, " -"user, status, created, modified, buy_time, random. Prefixe com '-' para " -"ordem decrescente (por exemplo, '-buy_time')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Recuperar uma única categoria (visualização detalhada)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Criar um atributo" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Não funciona para usuários que não são da equipe." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Excluir um atributo" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Reescrever uma categoria existente salvando itens não editáveis" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Reescreva alguns campos de uma categoria existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Preço de compra no momento do pedido" - -#: core/docs/drf/viewsets.py:233 -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 "" -"Finaliza a compra do pedido. Se `force_balance` for usado, a compra será " -"concluída usando o saldo do usuário; se `force_payment` for usado, uma " -"transação será iniciada." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "comprar um pedido sem criar uma conta" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finaliza a compra do pedido para um usuário não registrado." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Adicionar um produto ao pedido" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adiciona um produto a um pedido usando o `product_uuid` e os `attributes` " -"fornecidos." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "" -"Adicionar uma lista de produtos ao pedido, as quantidades não serão " -"contabilizadas" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adiciona uma lista de produtos a um pedido usando o `product_uuid` e os " -"`attributes` fornecidos." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Remover um produto do pedido" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Remove um produto de um pedido usando o `product_uuid` e os `attributes` " -"fornecidos." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Remover um produto do pedido, as quantidades não serão contabilizadas" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Remove uma lista de produtos de um pedido usando o `product_uuid` e os " -"`attributes` fornecidos." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Listar todos os atributos (visualização simples)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Para usuários que não pertencem à equipe, apenas suas próprias listas de " -"desejos são retornadas." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Recuperar um único atributo (visualização detalhada)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Criar um atributo" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Não funciona para usuários que não são da equipe." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Excluir um atributo" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Reescreva um atributo existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Reescreva alguns campos de um atributo existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Adicionar um produto ao pedido" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Adiciona um produto a uma lista de desejos usando o `product_uuid` fornecido" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Remover um produto da lista de desejos" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Remove um produto de uma lista de desejos usando o `product_uuid` fornecido" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Adicionar muitos produtos à lista de desejos" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Adiciona vários produtos a uma lista de desejos usando os `product_uuids` " -"fornecidos" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Remover um produto do pedido" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Remove vários produtos de uma lista de desejos usando os `product_uuids` " -"fornecidos" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Exemplos: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Listar todos os produtos (visualização simples)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "UUID (exato) do produto" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Nome do produto" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(lista) Nomes de categorias, sem distinção entre maiúsculas e minúsculas" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(exato) UUID da categoria" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(lista) Nomes de tags, sem distinção entre maiúsculas e minúsculas" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Preço mínimo das ações" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Preço máximo da ação" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(exato) Somente produtos ativos" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Nome da marca" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Quantidade mínima em estoque" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(exato) Digital vs. físico" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Recuperar um único produto (visualização detalhada)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "UUID ou Slug do produto" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Criar um produto" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Reescrever um produto existente, preservando os campos não editáveis" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Atualizar alguns campos de um produto existente, preservando os campos não " -"editáveis" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Excluir um produto" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "lista todos os feedbacks permitidos para um produto" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Listar todos os endereços" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Recuperar um único endereço" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Criar um novo endereço" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Excluir um endereço" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Atualizar um endereço inteiro" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Atualizar parcialmente um endereço" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Entrada de endereço com preenchimento automático" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Cadeia de consulta de dados brutos, anexe os dados do ponto de extremidade " -"de IP geográfico" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "limita a quantidade de resultados, 1 < limite < 10, padrão: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "listar todos os feedbacks (visualização simples)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "recuperar um único feedback (visualização detalhada)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "criar um feedback" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "excluir um feedback" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "reescrever um feedback existente salvando itens não editáveis" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Reescreva alguns campos de uma categoria existente salvando os não editáveis" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "listar todas as relações pedido-produto (visualização simples)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "recuperar uma única relação pedido-produto (visão detalhada)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "criar uma nova relação pedido-produto" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "substituir uma relação pedido-produto existente" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "atualizar parcialmente uma relação pedido-produto existente" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "excluir uma relação pedido-produto" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "adicionar ou remover feedback em uma relação pedido-produto" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Nenhum termo de pesquisa foi fornecido." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Nome" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Categorias" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Categorias Lesmas" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Tags" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Preço mínimo" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Preço máximo" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Está ativo" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Brand" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Atributos" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Quantidade" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Lesma" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "É digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Incluir subcategorias" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Deve haver um category_uuid para usar o sinalizador include_subcategories" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Pesquisa (ID, nome do produto ou número de peça)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Comprado depois (inclusive)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Comprado antes (inclusive)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "E-mail do usuário" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID do usuário" - -#: core/filters.py:289 -msgid "Status" -msgstr "Status" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "ID legível por humanos" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Parent" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Toda a categoria (com pelo menos 1 produto ou não)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Nível" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID do produto" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Chave para procurar ou colocar no cache" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Dados a serem armazenados no cache" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Tempo limite em segundos para definir os dados para o cache" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Dados em cache" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Dados JSON camelizados da URL solicitada" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Somente URLs que começam com http(s):// são permitidos" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Adicionar um produto ao pedido" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Pedido {order_uuid} não encontrado" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Remover um produto do pedido" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Remover todos os produtos do pedido" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Comprar um pedido" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Executar uma ação em uma lista de produtos no pedido" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Remover/Adicionar" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "A ação deve ser \"adicionar\" ou \"remover\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Adicionar um produto ao pedido" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Lista de desejos {wishlist_uuid} não encontrada" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Remover um produto do pedido" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Remover um produto do pedido" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Remover um produto do pedido" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Comprar um pedido" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Cadeia de endereços original fornecida pelo usuário" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} não existe: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "O limite deve estar entre 1 e 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - funciona muito bem" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Atributos" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Atributos agrupados" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Grupos de atributos" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Categorias" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Marcas" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Categorias" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Porcentagem de marcação" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "" -"Quais atributos e valores podem ser usados para filtrar essa categoria." - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "Preços mínimo e máximo dos produtos dessa categoria, se disponíveis." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Tags para esta categoria" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Produtos desta categoria" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Vendors" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Latitude (coordenada Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Longitude (coordenada X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Como fazer" - -#: core/graphene/object_types.py:262 -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." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Representa o feedback de um usuário." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Notificações" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "URL de download para este produto do pedido, se aplicável" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Uma lista dos produtos solicitados nesse pedido" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Endereço de cobrança" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -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" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Preço total deste pedido" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Quantidade total de produtos no pedido" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Todos os produtos estão no pedido digital?" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Pedidos" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "URL da imagem" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Imagens do produto" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Categoria" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Feedbacks" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Brand" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Grupos de atributos" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Preço" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Quantidade" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Número de feedbacks" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Produtos" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Códigos promocionais" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Produtos à venda" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promoções" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Vendor" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Produto" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Produtos da lista de desejos" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Listas de desejos" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Produtos marcados" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Etiquetas do produto" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Categorias de tags" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Tags das categorias" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Nome do projeto" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "E-mail da empresa" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Nome da empresa" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Endereço da empresa" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Número de telefone da empresa" - -#: core/graphene/object_types.py:506 -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" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Usuário do host de e-mail" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Valor máximo para pagamento" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Valor mínimo para pagamento" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Dados analíticos" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Dados do anúncio" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configuração" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Código do idioma" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Nome do idioma" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Sinalizador de idioma, se houver :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Obter uma lista de idiomas suportados" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Resultados da pesquisa de produtos" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Resultados da pesquisa de produtos" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Pai deste grupo" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Grupo de atributos pai" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Nome do grupo de atributos" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Grupo de atributos" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Armazena as credenciais e os pontos de extremidade necessários para a " -"comunicação da API do fornecedor" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Informações de autenticação" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Definir a marcação para produtos recuperados desse fornecedor" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Porcentagem da margem de lucro do fornecedor" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Nome do fornecedor" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Nome do fornecedor" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Identificador de tag interno para a tag do produto" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Nome da etiqueta" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Nome de fácil utilização para a etiqueta do produto" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Nome de exibição da tag" - -#: core/models.py:213 -msgid "product tag" -msgstr "Etiqueta do produto" - -#: core/models.py:251 -msgid "category tag" -msgstr "tag de categoria" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "tags de categoria" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Faça upload de uma imagem que represente essa categoria" - -#: core/models.py:332 -msgid "category image" -msgstr "Imagem da categoria" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Definir uma porcentagem de majoração para os produtos dessa categoria" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Pai dessa categoria para formar uma estrutura hierárquica" - -#: core/models.py:347 -msgid "parent category" -msgstr "Categoria dos pais" - -#: core/models.py:352 -msgid "category name" -msgstr "Nome da categoria" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Forneça um nome para essa categoria" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Adicione uma descrição detalhada para essa categoria" - -#: core/models.py:361 -msgid "category description" -msgstr "Descrição da categoria" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "tags que ajudam a descrever ou agrupar essa categoria" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Prioridade" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Nome da marca" - -#: core/models.py:430 -msgid "brand name" -msgstr "Nome da marca" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Faça upload de um logotipo que represente essa marca" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Imagem pequena da marca" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Faça upload de um logotipo grande que represente essa marca" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Imagem de marca grande" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Adicione uma descrição detalhada da marca" - -#: core/models.py:453 -msgid "brand description" -msgstr "Descrição da marca" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Categorias opcionais às quais essa marca está associada" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Categorias" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Categoria à qual este produto pertence" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Opcionalmente, associe esse produto a uma marca" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Tags que ajudam a descrever ou agrupar este produto" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Indica se esse produto é entregue digitalmente" - -#: core/models.py:549 -msgid "is product digital" -msgstr "O produto é digital" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Fornecer um nome de identificação claro para o produto" - -#: core/models.py:556 -msgid "product name" -msgstr "Nome do produto" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Adicione uma descrição detalhada do produto" - -#: core/models.py:562 -msgid "product description" -msgstr "Descrição do produto" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Número de peça para este produto" - -#: core/models.py:570 -msgid "part number" -msgstr "Número da peça" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Categoria desse atributo" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Grupo desse atributo" - -#: core/models.py:690 -msgid "string" -msgstr "Cordas" - -#: core/models.py:691 -msgid "integer" -msgstr "Inteiro" - -#: core/models.py:692 -msgid "float" -msgstr "Flutuação" - -#: core/models.py:693 -msgid "boolean" -msgstr "Booleano" - -#: core/models.py:694 -msgid "array" -msgstr "Matriz" - -#: core/models.py:695 -msgid "object" -msgstr "Objeto" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Tipo do valor do atributo" - -#: core/models.py:698 -msgid "value type" -msgstr "Tipo de valor" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Nome desse atributo" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Nome do atributo" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Atributo" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Atributo desse valor" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "O produto específico associado ao valor desse atributo" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Produto associado" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "O valor específico para esse atributo" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Forneça um texto alternativo para a imagem para fins de acessibilidade" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Texto alternativo da imagem" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Faça o upload do arquivo de imagem para este produto" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Imagem do produto" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Determina a ordem em que as imagens são exibidas" - -#: core/models.py:806 -msgid "display priority" -msgstr "Prioridade de exibição" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "O produto que esta imagem representa" - -#: core/models.py:825 -msgid "product images" -msgstr "Imagens do produto" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Desconto percentual para os produtos selecionados" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Porcentagem de desconto" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Forneça um nome exclusivo para essa promoção" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Nome da promoção" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Descrição da promoção" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Selecione quais produtos estão incluídos nessa promoção" - -#: core/models.py:885 -msgid "included products" -msgstr "Produtos incluídos" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promoção" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "O fornecedor que fornece esse estoque de produtos" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Fornecedor associado" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Preço final para o cliente após as marcações" - -#: core/models.py:930 -msgid "selling price" -msgstr "Preço de venda" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "O produto associado a essa entrada em estoque" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "O preço pago ao fornecedor por esse produto" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Preço de compra do fornecedor" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Quantidade disponível do produto em estoque" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Quantidade em estoque" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "SKU atribuído pelo fornecedor para identificar o produto" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU do fornecedor" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Arquivo digital associado a esse estoque, se aplicável" - -#: core/models.py:961 -msgid "digital file" -msgstr "Arquivo digital" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Entradas de estoque" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Produtos que o usuário marcou como desejados" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Usuário que possui esta lista de desejos" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Proprietário da lista de desejos" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Lista de desejos" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} não existe: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documentário" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentários" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Não resolvido" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Linha de endereço do cliente" - -#: core/models.py:1129 -msgid "address line" -msgstr "Linha de endereço" - -#: core/models.py:1131 -msgid "street" -msgstr "Rua" - -#: core/models.py:1132 -msgid "district" -msgstr "Distrito" - -#: core/models.py:1133 -msgid "city" -msgstr "Cidade" - -#: core/models.py:1134 -msgid "region" -msgstr "Região" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Código postal" - -#: core/models.py:1136 -msgid "country" -msgstr "País" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Ponto de geolocalização (Longitude, Latitude)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Resposta JSON completa do geocodificador para este endereço" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Resposta JSON armazenada do serviço de geocodificação" - -#: core/models.py:1159 -msgid "address" -msgstr "Endereço" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Endereços" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Código exclusivo usado por um usuário para resgatar um desconto" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Identificador de código promocional" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Valor de desconto fixo aplicado se a porcentagem não for usada" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Valor do desconto fixo" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Desconto percentual aplicado se o valor fixo não for usado" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Desconto percentual" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Registro de data e hora em que o código promocional expira" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Tempo de validade final" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "" -"Registro de data e hora a partir do qual esse código promocional é válido" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Hora de início da validade" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Registro de data e hora em que o código promocional foi usado, em branco se " -"ainda não tiver sido usado" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Registro de data e hora de uso" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Usuário atribuído a esse código promocional, se aplicável" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Usuário atribuído" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Código promocional" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Códigos promocionais" - -#: core/models.py:1260 -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." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "O código promocional já foi usado" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Tipo de desconto inválido para o código promocional {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "O endereço de cobrança usado para esse pedido" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Código promocional opcional aplicado a este pedido" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Código promocional aplicado" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "O endereço de entrega usado para esse pedido" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Endereço de entrega" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Status atual do pedido em seu ciclo de vida" - -#: core/models.py:1349 -msgid "order status" -msgstr "Status do pedido" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"Estrutura JSON de notificações a serem exibidas aos usuários; na interface " -"do usuário do administrador, é usada a visualização de tabela" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "Representação JSON dos atributos do pedido para esse pedido" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "O usuário que fez o pedido" - -#: core/models.py:1367 -msgid "user" -msgstr "Usuário" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "O registro de data e hora em que o pedido foi finalizado" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Tempo de compra" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Um identificador legível por humanos para o pedido" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "ID legível por humanos" - -#: core/models.py:1388 -msgid "order" -msgstr "Pedido" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Um usuário deve ter apenas uma ordem pendente por vez!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "Não é possível adicionar produtos a um pedido que não esteja pendente" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Não é possível adicionar produtos inativos ao pedido" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "" -"Não é possível adicionar mais produtos do que os disponíveis em estoque" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "Não é possível remover produtos de um pedido que não esteja pendente" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} não existe com a consulta <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "O código promocional não existe" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" -"Você só pode comprar produtos físicos com o endereço de entrega especificado!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "O endereço não existe" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"Não é possível comprar neste momento, tente novamente em alguns minutos." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Valor de força inválido" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Você não pode comprar um pedido vazio!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Fundos insuficientes para concluir o pedido" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"Não é possível comprar sem registro, forneça as seguintes informações: nome " -"do cliente, e-mail do cliente, número de telefone do cliente" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Método de pagamento inválido: {payment_method} de " -"{available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "O preço pago pelo cliente por esse produto no momento da compra" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Preço de compra no momento do pedido" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "" -"Comentários internos para administradores sobre este produto encomendado" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Comentários internos" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Notificações do usuário" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "Representação JSON dos atributos desse item" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Atributos ordenados do produto" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Referência ao pedido pai que contém esse produto" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Ordem dos pais" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "O produto específico associado a essa linha de pedido" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Quantidade desse produto específico no pedido" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Quantidade do produto" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Status atual desse produto no pedido" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Status da linha de produtos" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "ação incorreta especificada para feedback: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "você não pode dar feedback a um pedido que não foi recebido" - -#: core/models.py:1882 -msgid "download" -msgstr "Baixar" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Downloads" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Não é possível fazer download de um ativo digital para um pedido não " -"concluído" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "" -"Comentários fornecidos pelo usuário sobre sua experiência com o produto" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Comentários de feedback" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Faz referência ao produto específico em um pedido sobre o qual se trata esse " -"feedback" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Produto de pedido relacionado" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Classificação atribuída pelo usuário ao produto" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Avaliação do produto" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Feedback" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"Você deve fornecer um comentário, uma classificação e o uuid do produto do " -"pedido para adicionar feedback." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Erro durante a criação do código promocional: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Confirmação de pedido" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logotipo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Olá %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Obrigado por seu pedido #%(order.pk)s! Temos o prazer de informá-lo de que " -"seu pedido foi colocado em prática. Abaixo estão os detalhes de seu pedido:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Total" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Preço total" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Se tiver alguma dúvida, entre em contato com nosso suporte em " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Com os melhores cumprimentos,
da equipe de %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Todos os direitos reservados" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Pedido entregue" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Olá %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Seu pedido №%(order_uuid)s foi processado com sucesso! Abaixo estão os " -"detalhes de seu pedido:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"adicionais\n" -" informações adicionais" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Valor" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"Se tiver alguma dúvida, entre em contato com nosso suporte em " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Atenciosamente,
a equipe de %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Chave" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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 " -"estão os detalhes de seu pedido:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Preço da remessa" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Seu pedido será entregue no seguinte endereço:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Com os melhores cumprimentos,
a equipe de %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"todos os direitos\n" -" reservados" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "São necessários dados e tempo limite" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} deve ser o modelo" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} deve ser um objeto de lista" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Entre em contato conosco iniciado" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmação de pedido" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Order Delivered" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "Você não tem permissão para executar essa ação." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "O parâmetro NOMINATIM_URL deve ser configurado!" - -#: core/validators.py:16 -#, python-brace-format -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" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Formato de número telefônico inválido" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Você só pode fazer o download do ativo digital uma vez" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon não encontrado" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Erro de geocodificação: {e}" diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo deleted file mode 100644 index 3c7a6afd..00000000 Binary files a/core/locale/ro_RO/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/ro_RO/LC_MESSAGES/django.po b/core/locale/ro_RO/LC_MESSAGES/django.po deleted file mode 100644 index 97ac952d..00000000 --- a/core/locale/ro_RO/LC_MESSAGES/django.po +++ /dev/null @@ -1,2337 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: ro-ro\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "ID unic" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"ID-ul unic este utilizat pentru a identifica cu siguranță orice obiect din " -"baza de date" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Este activ" - -#: core/abstract.py:21 -msgid "" -"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ă" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Creat" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Când a apărut pentru prima dată obiectul în baza de date" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Modificat" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Când a fost editat obiectul ultima dată" - -#: core/admin.py:55 -msgid "translations" -msgstr "Traduceri" - -#: core/admin.py:59 -msgid "general" -msgstr "Generalități" - -#: core/admin.py:61 -msgid "relations" -msgstr "Relații" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Metadate" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Timestamps" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Activați %(verbose_name_plural)s selectate" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s activat cu succes!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Dezactivați %(verbose_name_plural)s selectate" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s dezactivat cu succes." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Atribut Valoare" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Valori ale atributului" - -#: core/admin.py:124 -msgid "image" -msgstr "Imagine" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Imagini" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Stoc" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Stocuri" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Comanda Produs" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Comandați produse" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Copii" - -#: core/admin.py:471 -msgid "Config" -msgstr "Configurare" - -#: core/apps.py:8 -msgid "core" -msgstr "Nucleu" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Terminat" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Livrarea" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Livrat" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Anulată" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Eșuat" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "În așteptare" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Acceptat" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Bani returnați" - -#: core/choices.py:17 -msgid "payment" -msgstr "Plata" - -#: core/choices.py:21 -msgid "momental" -msgstr "Momental" - -#: core/choices.py:24 -msgid "successful" -msgstr "De succes" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Cache I/O" - -#: core/docs/drf/views.py:19 -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 "" -"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." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Obțineți o listă a limbilor acceptate" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Obțineți parametrii expunibili ai aplicației" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Trimiteți un mesaj echipei de asistență" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Solicitați un URL CORSed. Numai https este permis." - -#: core/docs/drf/views.py:85 -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" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Achiziționați o comandă ca întreprindere" - -#: core/docs/drf/views.py:98 -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." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Lista tuturor grupurilor de atribute (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Recuperarea unui singur grup de atribute (vedere detaliată)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Crearea unui grup de atribute" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Ștergerea unui grup de atribute" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Rescrierea unui grup de atribute existent cu salvarea elementelor needitabile" - -#: core/docs/drf/viewsets.py:63 -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" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Lista tuturor atributelor (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Recuperarea unui singur atribut (vedere detaliată)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Crearea unui atribut" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Ștergerea unui atribut" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Rescrieți unele câmpuri ale unui atribut existent salvând elementele " -"needitabile" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Lista tuturor valorilor atributelor (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Recuperarea valorii unui singur atribut (vedere detaliată)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Crearea unei valori de atribut" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Ștergerea unei valori de atribut" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Rescrierea unei valori de atribut existente care salvează non-editabile" - -#: core/docs/drf/viewsets.py:117 -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" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Lista tuturor categoriilor (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Recuperarea unei singure categorii (vedere detaliată)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Creați o categorie" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Ștergeți o categorie" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "Rescrieți o categorie existentă salvând non-editabile" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " -"needitabile" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Lista tuturor categoriilor (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Pentru utilizatorii care nu fac parte din personal, sunt returnate doar " -"comenzile proprii." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Filtrați comenzile cu buy_time >= această dată ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Filtrează comenzile cu buy_time <= această dată ISO 8601" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Filtrare după UUID exact al comenzii" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Filtrați după ID-ul exact al comenzii care poate fi citit de către om" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Filtrare în funcție de adresa de e-mail a utilizatorului (potrivire exactă " -"insensibilă la majuscule)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Filtrare după UUID-ul utilizatorului" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Filtrare în funcție de starea comenzii (potrivire a substringurilor fără " -"deosebire de majuscule)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"Ordonați după unul dintre: uuid, human_readable_id, user_email, user, " -"status, created, modified, buy_time, random. Prefixați cu \"-\" pentru " -"ordine descrescătoare (de exemplu, \"-buy_time\")." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Recuperarea unei singure categorii (vedere detaliată)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Crearea unui atribut" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Ștergerea unui atribut" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "Rescrieți o categorie existentă salvând non-editabile" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " -"needitabile" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Prețul de achiziție la momentul comenzii" - -#: core/docs/drf/viewsets.py:233 -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 "" -"Finalizează comanda de achiziție. Dacă se utilizează `force_balance`, " -"achiziția este finalizată utilizând soldul utilizatorului; Dacă se " -"utilizează `force_payment`, este inițiată o tranzacție." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "achiziționarea unei comenzi fără crearea unui cont" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "finalizează achiziția comenzii pentru un utilizator neînregistrat." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Adăugați un produs la comandă" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adaugă un produs la o comandă folosind `product_uuid` și `attributes` " -"furnizate." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Adăugați o listă de produse la comandă, cantitățile nu vor conta" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Adaugă o listă de produse la o comandă folosind `product_uuid` și " -"`attributes` furnizate." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Eliminați un produs din comandă" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Elimină un produs dintr-o comandă folosind `product_uuid` și `attributes` " -"furnizate." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "" -"Eliminați un produs din comandă, cantitățile nu vor fi luate în considerare" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Îndepărtează o listă de produse dintr-o comandă folosind `product_uuid` și " -"`attributes` furnizate." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Lista tuturor atributelor (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Pentru utilizatorii care nu fac parte din personal, sunt returnate doar " -"propriile liste de dorințe." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Recuperarea unui singur atribut (vedere detaliată)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Crearea unui atribut" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Ștergerea unui atribut" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Rescrieți unele câmpuri ale unui atribut existent salvând elementele " -"needitabile" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Adăugați un produs la comandă" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Adaugă un produs la o listă de dorințe folosind `product_uuid` furnizat" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Eliminați un produs din lista de dorințe" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Înlătură un produs dintr-o listă de dorințe folosind `product_uuid` furnizat" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Adăugați mai multe produse la lista de dorințe" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Adaugă mai multe produse la o listă de dorințe folosind `product_uuids` " -"furnizat" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Eliminați un produs din comandă" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Îndepărtează mai multe produse dintr-o listă de dorințe folosind " -"`product_uuids` furnizat" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Exemple: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`" - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Listează toate produsele (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(exact) UUID al produsului" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(icontains) Denumirea produsului" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(listă) Numele categoriilor, fără deosebire de majuscule" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(exact) UUID al categoriei" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(listă) Nume de etichete, fără diferențiere de majuscule" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Prețul minim al acțiunilor" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Prețul maxim al acțiunilor" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(exact) Numai produse active" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Denumire comercială" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Cantitatea minimă de stoc" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digital vs. fizic" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" -"**Autorizate:** uuid, rating, nume, slug, creat, modificat, preț, aleatoriu" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Recuperarea unui singur produs (vedere detaliată)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "UUID sau Slug al produsului" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Creați un produs" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "" -"Rescrierea unui produs existent, păstrând câmpurile care nu pot fi editate" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Actualizarea unor câmpuri ale unui produs existent, păstrând câmpurile " -"needitabile" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Ștergeți un produs" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "listează toate feedback-urile permise pentru un produs" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Enumerați toate adresele" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Recuperarea unei singure adrese" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Creați o adresă nouă" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Ștergeți o adresă" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Actualizarea unei adrese întregi" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Actualizarea parțială a unei adrese" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Autocompletare adresă de intrare" - -#: core/docs/drf/viewsets.py:576 -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-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" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "limitează cantitatea de rezultate, 1 < limit < 10, implicit: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "lista tuturor feedback-urilor (vizualizare simplă)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "recuperați un singur feedback (vizualizare detaliată)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "creați un feedback" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "ștergeți un feedback" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "rescrierea unui feedback existent cu salvarea elementelor needitabile" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " -"needitabile" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "lista tuturor relațiilor comandă-produs (vedere simplă)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "recuperarea unei singure relații comandă-produs (vedere detaliată)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "crearea unei noi relații comandă-produs" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "să înlocuiască o relație comandă-produs existentă" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "actualizarea parțială a unei relații comandă-produs existente" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "ștergeți o relație comandă-produs" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Nu a fost furnizat niciun termen de căutare." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Nume și prenume" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Categorii" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Categorii Melci" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Etichete" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Preț minim" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Preț maxim" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Este activ" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Marca" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Atribute" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Cantitate" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Melc" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Este digital" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Includeți subcategorii" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Trebuie să existe un category_uuid pentru a utiliza flagul " -"include_subcategories" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Căutare (ID, numele produsului sau numărul piesei)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Cumpărat după (inclusiv)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Cumpărat înainte (inclusiv)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "E-mail utilizator" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID utilizator" - -#: core/filters.py:289 -msgid "Status" -msgstr "Statut" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "ID lizibil de către om" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Părinte" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Nivel" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID produs" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Cheie care trebuie căutată sau introdusă în cache" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Date de stocat în cache" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Timeout în secunde pentru a seta datele în cache" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Date în cache" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Date JSON Camelizate de la URL-ul solicitat" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Sunt permise numai URL-urile care încep cu http(s)://" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Adăugați un produs la comandă" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Comanda {order_uuid} nu a fost găsită" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Eliminați un produs din comandă" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Eliminați toate produsele din comandă" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Cumpărați o comandă" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -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!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" - -#: core/graphene/mutations.py:233 -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ă" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Eliminare/adăugare" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Acțiunea trebuie să fie fie \"adăugare\" sau \"eliminare\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Adăugați un produs la comandă" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Lista dorințelor {wishlist_uuid} nu a fost găsită" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Eliminați un produs din comandă" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Eliminați un produs din comandă" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Eliminați un produs din comandă" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Cumpărați o comandă" - -#: core/graphene/mutations.py:456 -msgid "" -"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" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Șirul de adrese original furnizat de utilizator" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} nu există: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Limita trebuie să fie între 1 și 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - funcționează ca un farmec" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Atribute" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Atribute grupate" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Grupuri de atribute" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Categorii" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Mărci" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Categorii" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Procentul de majorare" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "" -"Atributele și valorile care pot fi utilizate pentru filtrarea acestei " -"categorii." - -#: core/graphene/object_types.py:133 -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." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Etichete pentru această categorie" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Produse din această categorie" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Furnizori" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Latitudine (coordonata Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Longitudine (coordonata X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Cum să" - -#: core/graphene/object_types.py:262 -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ă." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Reprezintă feedback de la un utilizator." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Notificări" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "URL de descărcare pentru acest produs de comandă, dacă este cazul" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "O listă a produselor comandate în această comandă" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Adresa de facturare" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -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ă" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Prețul total al acestei comenzi" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Cantitatea totală de produse din comandă" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Sunt toate produsele din comanda digitală" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Ordine" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "URL imagine" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Imagini ale produsului" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Categorie" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Feedback-uri" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Marca" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Grupuri de atribute" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Preț" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Cantitate" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Numărul de reacții" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Produse" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Coduri promoționale" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Produse scoase la vânzare" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Promoții" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Furnizor" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Produs" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Produse dorite" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Liste de dorințe" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Produse etichetate" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Etichete de produs" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Categorii etichetate" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Etichete \"Categorii" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Numele proiectului" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Email companie" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Numele companiei" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Adresa companiei" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Numărul de telefon al companiei" - -#: core/graphene/object_types.py:506 -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ă" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Utilizator gazdă e-mail" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Suma maximă pentru plată" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Suma minimă pentru plată" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Date analitice" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Date publicitare" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Configurație" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Codul limbii" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Numele limbii" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Indicatorul de limbă, dacă există :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Obțineți o listă a limbilor acceptate" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Rezultate căutare produse" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Rezultate căutare produse" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Părinte al acestui grup" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Grup de atribute părinte" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Numele grupului de atribute" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Grup de atribute" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Stochează acreditările și punctele finale necesare pentru comunicarea API a " -"furnizorului" - -#: core/models.py:148 -msgid "authentication info" -msgstr "Informații privind autentificarea" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "" -"Definirea marjei de profit pentru produsele preluate de la acest furnizor" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Procentul de majorare al furnizorului" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Numele acestui vânzător" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Numele furnizorului" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Identificator intern de etichetă pentru eticheta produsului" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Nume etichetă" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Nume ușor de utilizat pentru eticheta produsului" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Nume afișare etichetă" - -#: core/models.py:213 -msgid "product tag" -msgstr "Etichetă produs" - -#: core/models.py:251 -msgid "category tag" -msgstr "etichetă de categorie" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "Etichete de categorie" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Încărcați o imagine care reprezintă această categorie" - -#: core/models.py:332 -msgid "category image" -msgstr "Categorie imagine" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Definiți un procent de majorare pentru produsele din această categorie" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Părinte al acestei categorii pentru a forma o structură ierarhică" - -#: core/models.py:347 -msgid "parent category" -msgstr "Categoria de părinți" - -#: core/models.py:352 -msgid "category name" -msgstr "Numele categoriei" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Furnizați un nume pentru această categorie" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Adăugați o descriere detaliată pentru această categorie" - -#: core/models.py:361 -msgid "category description" -msgstr "Descriere categorie" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Prioritate" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Denumirea acestui brand" - -#: core/models.py:430 -msgid "brand name" -msgstr "Nume de marcă" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Încărcați un logo care reprezintă acest brand" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Brand imagine mică" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Încărcați un logo mare care reprezintă acest brand" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Imagine de marcă mare" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Adăugați o descriere detaliată a mărcii" - -#: core/models.py:453 -msgid "brand description" -msgstr "Descrierea mărcii" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Categorii opționale cu care acest brand este asociat" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Categorii" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Categoria din care face parte acest produs" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "Opțional, asociați acest produs cu un brand" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Indică dacă acest produs este livrat digital" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Produsul este digital" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Furnizați o denumire clară de identificare a produsului" - -#: core/models.py:556 -msgid "product name" -msgstr "Denumirea produsului" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Adăugați o descriere detaliată a produsului" - -#: core/models.py:562 -msgid "product description" -msgstr "Descrierea produsului" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Numărul piesei pentru acest produs" - -#: core/models.py:570 -msgid "part number" -msgstr "Numărul piesei" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Categoria acestui atribut" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Grupul acestui atribut" - -#: core/models.py:690 -msgid "string" -msgstr "Șir de caractere" - -#: core/models.py:691 -msgid "integer" -msgstr "Număr întreg" - -#: core/models.py:692 -msgid "float" -msgstr "Float" - -#: core/models.py:693 -msgid "boolean" -msgstr "Boolean" - -#: core/models.py:694 -msgid "array" -msgstr "Array" - -#: core/models.py:695 -msgid "object" -msgstr "Obiect" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Tipul valorii atributului" - -#: core/models.py:698 -msgid "value type" -msgstr "Tipul de valoare" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Denumirea acestui atribut" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Numele atributului" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Atribut" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Atributul acestei valori" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Produsul specific asociat cu valoarea acestui atribut" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Produs asociat" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "Valoarea specifică pentru acest atribut" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Textul alt al imaginii" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Încărcați fișierul de imagine pentru acest produs" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Imaginea produsului" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Determină ordinea în care sunt afișate imaginile" - -#: core/models.py:806 -msgid "display priority" -msgstr "Prioritatea afișării" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Produsul pe care îl reprezintă această imagine" - -#: core/models.py:825 -msgid "product images" -msgstr "Imagini ale produsului" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Procentul de reducere pentru produsele selectate" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Procent de reducere" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Furnizați un nume unic pentru această promoție" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Numele promoției" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Descrierea promoției" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Selectați ce produse sunt incluse în această promoție" - -#: core/models.py:885 -msgid "included products" -msgstr "Produse incluse" - -#: core/models.py:889 -msgid "promotion" -msgstr "Promovare" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Furnizorul care furnizează acest stoc de produse" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Furnizor asociat" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Prețul final pentru client după majorări" - -#: core/models.py:930 -msgid "selling price" -msgstr "Prețul de vânzare" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Produsul asociat cu această intrare în stoc" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Prețul plătit vânzătorului pentru acest produs" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Prețul de achiziție al furnizorului" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Cantitatea disponibilă a produsului în stoc" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Cantitate în stoc" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "SKU atribuit de furnizor pentru identificarea produsului" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU al furnizorului" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" - -#: core/models.py:961 -msgid "digital file" -msgstr "Fișier digital" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Intrări pe stoc" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Utilizatorul care deține această listă de dorințe" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Proprietarul listei de dorințe" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Lista dorințelor" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} nu există: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Documentar" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Documentare" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Nerezolvat" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Linia de adresă pentru client" - -#: core/models.py:1129 -msgid "address line" -msgstr "Linia de adresă" - -#: core/models.py:1131 -msgid "street" -msgstr "Strada" - -#: core/models.py:1132 -msgid "district" -msgstr "Districtul" - -#: core/models.py:1133 -msgid "city" -msgstr "Oraș" - -#: core/models.py:1134 -msgid "region" -msgstr "Regiunea" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Cod poștal" - -#: core/models.py:1136 -msgid "country" -msgstr "Țara" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Punct de geolocație (longitudine, latitudine)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Răspuns JSON complet de la geocoder pentru această adresă" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Răspuns JSON stocat de la serviciul de geocodare" - -#: core/models.py:1159 -msgid "address" -msgstr "Adresă" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Adrese" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Cod unic utilizat de un utilizator pentru a răscumpăra o reducere" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Cod promoțional de identificare" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Valoarea fixă a reducerii" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Reducere procentuală" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Data la care expiră codul promoțional" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Timpul final de valabilitate" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Timestamp de la care acest cod promoțional este valabil" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Ora de începere a valabilității" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Momentul în care codul promoțional a fost utilizat, gol dacă nu a fost " -"utilizat încă" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Timestamp de utilizare" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Utilizator atribuit" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Cod promoțional" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Coduri promoționale" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " -"sau niciuna." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Codul promoțional a fost deja utilizat" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "Adresa de facturare utilizată pentru această comandă" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Cod promoțional opțional aplicat la această comandă" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Cod promoțional aplicat" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "Adresa de expediere utilizată pentru această comandă" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Adresa de expediere" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Stadiul actual al comenzii în ciclul său de viață" - -#: core/models.py:1349 -msgid "order status" -msgstr "Stadiul comenzii" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"Structura JSON a notificărilor care urmează să fie afișate utilizatorilor, " -"în interfața de administrare este utilizată vizualizarea tabelară" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "Utilizatorul care a plasat comanda" - -#: core/models.py:1367 -msgid "user" -msgstr "Utilizator" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Momentul în care comanda a fost finalizată" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Cumpărați timp" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Un identificator ușor de citit pentru comandă" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "ID lizibil de către om" - -#: core/models.py:1388 -msgid "order" -msgstr "Comandă" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "" -"Un utilizator trebuie să aibă un singur ordin în așteptare la un moment dat!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "Nu puteți adăuga produse la o comandă care nu este în așteptare" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Nu puteți adăuga produse inactive la comandă" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "Nu puteți adăuga mai multe produse decât cele disponibile în stoc" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "" -"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} nu există cu interogarea <{query}>" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Codul promoțional nu există" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" -"Puteți cumpăra numai produse fizice cu adresa de expediere specificată!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Adresa nu există" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"Nu puteți achiziționa în acest moment, vă rugăm să încercați din nou în " -"câteva minute." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Valoare forță invalidă" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Nu puteți achiziționa o comandă goală!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Insuficiența fondurilor pentru finalizarea comenzii" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"nu puteți cumpăra fără înregistrare, vă rugăm să furnizați următoarele " -"informații: nume client, e-mail client, număr de telefon client" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Metodă de plată invalidă: {payment_method} de la {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "Prețul plătit de client pentru acest produs la momentul achiziției" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Prețul de achiziție la momentul comenzii" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "" -"Comentarii interne pentru administratori cu privire la acest produs comandat" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Observații interne" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Notificări pentru utilizatori" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "Reprezentarea JSON a atributelor acestui element" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Atribute de produs ordonate" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Trimitere la comanda mamă care conține acest produs" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Ordinul părinților" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Produsul specific asociat cu această linie de comandă" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Cantitatea acestui produs specific din comandă" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Cantitatea produsului" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Starea actuală a acestui produs în comandă" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Starea liniei de produse" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "acțiune greșită specificată pentru feedback: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "" -"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" - -#: core/models.py:1882 -msgid "download" -msgstr "Descărcare" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Descărcări" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Nu puteți descărca un bun digital pentru o comandă nefinalizată" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "" -"Comentarii furnizate de utilizatori cu privire la experiența lor cu produsul" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Comentarii de feedback" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Face referire la produsul specific dintr-o comandă despre care este vorba în " -"acest feedback" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Produs aferent comenzii" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Rating atribuit de utilizator pentru produs" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Evaluarea produsului" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Feedback" - -#: core/serializers/utility.py:87 -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." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Eroare în timpul creării codului promoțional: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Confirmarea comenzii" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Logo" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Bună ziua %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Vă mulțumim pentru comanda dvs. #%(order.pk)s! Suntem încântați să vă " -"informăm că am preluat comanda dvs. în lucru. Mai jos sunt detaliile " -"comenzii dvs:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Total" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Preț total" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(config.EMAIL_HOST_USER)s." -msgstr "" -"Dacă aveți întrebări, nu ezitați să contactați asistența noastră la " -"%(config.EMAIL_HOST_USER)s." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "Salutări,
echipa %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Toate drepturile rezervate" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Comanda livrată" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Bună ziua %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Am procesat cu succes comanda dvs. №%(order_uuid)s! Mai jos sunt detaliile " -"comenzii dvs:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"informații suplimentare\n" -" informații suplimentare" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Valoare" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"Dacă aveți întrebări, nu ezitați să contactați asistența noastră la " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "Cele mai bune salutări,
echipa %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Cheie" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"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:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Preț de livrare" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Comanda dvs. va fi livrată la următoarea adresă:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "Salutări,
echipa %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"toate drepturile\n" -" rezervate" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Sunt necesare atât datele, cât și timpul de așteptare" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} trebuie să fie model" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} trebuie să fie un obiect listă" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Contactați-ne inițiat" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Confirmarea comenzii" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Comanda livrată" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "Nu aveți permisiunea de a efectua această acțiune." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Parametrul NOMINATIM_URL trebuie să fie configurat!" - -#: core/validators.py:16 -#, python-brace-format -msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" -msgstr "" -"Dimensiunile imaginii nu trebuie să depășească w{max_width} x h{max_height} " -"pixeli" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Format invalid al numărului de telefon" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Puteți descărca activul digital o singură dată" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon nu a fost găsit" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Eroare de geocodare: {e}" diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo deleted file mode 100644 index 85bb0549..00000000 Binary files a/core/locale/ru_RU/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/ru_RU/LC_MESSAGES/django.po b/core/locale/ru_RU/LC_MESSAGES/django.po deleted file mode 100644 index 434082bc..00000000 --- a/core/locale/ru_RU/LC_MESSAGES/django.po +++ /dev/null @@ -1,2334 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: ru-ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "Уникальный идентификатор" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "" -"Уникальный идентификатор используется для точной идентификации любого " -"объекта базы данных" - -#: core/abstract.py:20 -msgid "is active" -msgstr "Активен" - -#: core/abstract.py:21 -msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "" -"Если установлено значение false, этот объект не может быть виден " -"пользователям без необходимого разрешения" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "Создано" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "Когда объект впервые появился в базе данных" - -#: core/abstract.py:27 -msgid "modified" -msgstr "Модифицированный" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "Когда объект был отредактирован в последний раз" - -#: core/admin.py:55 -msgid "translations" -msgstr "Переводы" - -#: core/admin.py:59 -msgid "general" -msgstr "Общие сведения" - -#: core/admin.py:61 -msgid "relations" -msgstr "Отношения" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "Метаданные" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "Временные метки" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "Активировать выбранные %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s успешно активирован!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "Деактивировать выбранные %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "%(verbose_name_plural)s успешно деактивирован." - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "Значение атрибута" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "Значения атрибутов" - -#: core/admin.py:124 -msgid "image" -msgstr "Изображение" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "Изображения" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "Наличие" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "Наличия" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "Заказанный товар" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "Заказанные товары" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "Дети" - -#: core/admin.py:471 -msgid "Config" -msgstr "Конфигурация" - -#: core/apps.py:8 -msgid "core" -msgstr "Главное" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "Готовые" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "Доставка" - -#: core/choices.py:6 -msgid "delivered" -msgstr "Доставлено" - -#: core/choices.py:7 -msgid "canceled" -msgstr "Отменено" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "Не удалось" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "В ожидании" - -#: core/choices.py:10 -msgid "accepted" -msgstr "Принято" - -#: core/choices.py:11 -msgid "money returned" -msgstr "Возвращенные деньги" - -#: core/choices.py:17 -msgid "payment" -msgstr "Оплата" - -#: core/choices.py:21 -msgid "momental" -msgstr "Моментальный" - -#: core/choices.py:24 -msgid "successful" -msgstr "Успешный" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "Ввод/вывод кэша" - -#: core/docs/drf/views.py:19 -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 "" -"Применяйте только ключ для чтения разрешенных данных из кэша.\n" -"Применяйте ключ, данные и таймаут с аутентификацией для записи данных в кэш." - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "Получите список поддерживаемых языков" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "Получите параметры приложения, которые можно использовать" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "Отправьте сообщение в службу поддержки" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "Запросите URL-адрес с поддержкой CORS. Допускается только https." - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "" -"Ручка глобального поиска для запросов по всем открытым таблицам проекта" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "Приобрести заказ в качестве предприятия" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"Приобретите заказ как бизнес, используя предоставленные `продукты` с " -"`product_uuid` и `attributes`." - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "Список всех групп атрибутов (простой вид)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "Получение одной группы атрибутов (подробный просмотр)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "Создайте группу атрибутов" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "Удаление группы атрибутов" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "" -"Переписать существующую группу атрибутов с сохранением нередактируемых " -"элементов" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "" -"Переписывание некоторых полей существующей группы атрибутов с сохранением " -"нередактируемых полей" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "Список всех атрибутов (простой вид)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "Получение одного атрибута (подробный просмотр)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "Создайте атрибут" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "Удалить атрибут" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "Переписать существующий атрибут, сохранив нередактируемый" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "" -"Переписывание некоторых полей существующего атрибута с сохранением " -"нередактируемых полей" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "Список всех значений атрибутов (простой вид)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "Получение значения одного атрибута (подробный просмотр)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "Создание значения атрибута" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "Удалить значение атрибута" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "" -"Перезапись существующего значения атрибута с сохранением нередактируемых " -"значений" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "" -"Переписывание некоторых полей существующего значения атрибута с сохранением " -"нередактируемых значений" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "Список всех категорий (простой вид)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "Получение одной категории (подробный просмотр)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "Создайте категорию" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "Удалить категорию" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "" -"Переписать существующую категорию с сохранением нередактируемых объектов" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" -"Переписать некоторые поля существующей категории с сохранением " -"нередактируемых полей" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "Список всех категорий (простой вид)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "" -"Для пользователей, не являющихся сотрудниками, возвращаются только их " -"собственные заказы." - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "Отфильтруйте ордера с buy_time >= этому времени ISO 8601" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "Отфильтруйте ордера с buy_time <= этому времени ISO 8601" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "Фильтр по точному UUID заказа" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "Фильтр по точному человекочитаемому идентификатору заказа" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "" -"Фильтр по электронной почте пользователя (точное совпадение без учета " -"регистра)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "Фильтр по UUID пользователя" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "" -"Фильтр по статусу заказа (нечувствительное к регистру подстрочное " -"соответствие)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"Упорядочивайте по одному из следующих признаков: uuid, human_readable_id, " -"user_email, user, status, created, modified, buy_time, random. Префикс '-' " -"для нисходящего порядка (например, '-buy_time')." - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "Получение одной категории (подробный просмотр)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "Создайте атрибут" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "Не работает для нештатных пользователей." - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "Удалить атрибут" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "" -"Переписать существующую категорию с сохранением нередактируемых объектов" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "" -"Переписать некоторые поля существующей категории с сохранением " -"нередактируемых полей" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "Покупная цена на момент заказа" - -#: core/docs/drf/viewsets.py:233 -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`, инициируется транзакция." - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "приобретение заказа без создания учетной записи" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "завершает покупку заказа для незарегистрированного пользователя." - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "Добавить товар в заказ" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Добавляет товар в заказ, используя предоставленные `product_uuid` и " -"`attributes`." - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "Добавьте список продуктов для заказа, количество не учитывается" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Добавляет список товаров в заказ, используя предоставленные `product_uuid` и " -"`attributes`." - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "Удалить продукт из заказа" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "" -"Удаляет товар из заказа, используя предоставленные `product_uuid` и " -"`attributes`." - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "Удалите продукт из заказа, количество не будет учитываться" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "" -"Удаляет список товаров из заказа, используя предоставленные `product_uuid` и " -"`attributes`." - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "Список всех атрибутов (простой вид)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "" -"Для пользователей, не являющихся сотрудниками, возвращаются только их " -"собственные списки желаний." - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "Получение одного атрибута (подробный просмотр)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "Создайте атрибут" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "Не работает для нештатных пользователей." - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "Удалить атрибут" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "Переписать существующий атрибут, сохранив нередактируемый" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "" -"Переписывание некоторых полей существующего атрибута с сохранением " -"нередактируемых полей" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "Добавить товар в заказ" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "" -"Добавляет товар в список желаний, используя предоставленный `product_uuid`." - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "Удалить продукт из списка желаний" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "" -"Удаляет продукт из списка желаний, используя предоставленный `product_uuid`." - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "Добавьте много товаров в список желаний" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "" -"Добавляет множество товаров в список желаний, используя предоставленные " -"`product_uuids`." - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "Удалить продукт из заказа" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "" -"Удаляет множество товаров из списка желаний, используя предоставленные " -"`product_uuids`." - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"Примеры: \n" -"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" -"`b64-description=icontains-aGVhdC1jb2xk`." - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "Список всех продуктов (простой вид)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(точный) UUID продукта" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(иконки) Название продукта" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(список) Названия категорий, без учета регистра" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(точный) UUID категории" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(список) Имена тегов, нечувствительные к регистру" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) Минимальная цена акции" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) Максимальная цена акции" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(точно) Только активные продукты" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) Торговое название" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Минимальное количество на складе" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(точно) Цифровые и физические" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "Получение одного продукта (подробный просмотр)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "UUID или Slug продукта" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "Создать продукт" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "Переписать существующий продукт, сохранив нередактируемые поля" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "" -"Обновление некоторых полей существующего продукта с сохранением " -"нередактируемых полей" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "Удалить продукт" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "список всех разрешенных отзывов о продукте" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "Перечислите все адреса" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "Получение одного адреса" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "Создайте новый адрес" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "Удалить адрес" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "Обновление всего адреса" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "Частичное обновление адреса" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "Автозаполнение ввода адреса" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "" -"Строка запроса сырых данных, пожалуйста, дополните ее данными с конечной " -"точки geo-IP" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "ограничивает количество результатов, 1 < limit < 10, по умолчанию: 5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "список всех отзывов (простой вид)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "получить один отзыв (подробный просмотр)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "создать отзыв" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "удалить отзыв" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "" -"Переписать существующую категорию с сохранением нередактируемых объектов" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "" -"Переписать некоторые поля существующей категории с сохранением " -"нередактируемых полей" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "список всех отношений \"заказ-продукт\" (простой вид)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "получить одно отношение \"заказ-продукт\" (подробный просмотр)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "создать новое отношение \"заказ-продукт" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "заменить существующее отношение \"заказ-продукт" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "частично обновить существующее отношение \"заказ-продукт" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "удалить отношение \"заказ-продукт" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "добавлять или удалять отзывы о связи заказ-продукт" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "Поисковый запрос не предоставлен." - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "Имя" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "Категории" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "Категории Слизни" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "Теги" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "Мин. цена" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "Максимальная цена" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "Активен" - -#: core/filters.py:70 -msgid "Brand" -msgstr "Бренд" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "Атрибуты" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "Количество" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "Слаг" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "Цифровой" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "Включите подкатегории" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "" -"Для использования флага include_subcategories должен быть указан " -"category_uuid." - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "Поиск (идентификатор, название продукта или номер детали)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "Куплено после (включительно)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "Куплено ранее (включительно)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "Электронная почта пользователя" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "UUID пользователя" - -#: core/filters.py:289 -msgid "Status" -msgstr "Статус" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "Человекочитаемый идентификатор" - -#: core/filters.py:354 -msgid "Parent" -msgstr "Родитель" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "Вся категория (есть хотя бы 1 продукт или нет)" - -#: core/filters.py:362 -msgid "Level" -msgstr "Уровень" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "UUID продукта" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "Ключ, который нужно найти в тайнике или вложить в него" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "Данные для хранения в кэше" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "Тайм-аут в секундах для занесения данных в кэш" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "Кэшированные данные" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "Camelized JSON-данные из запрашиваемого URL" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "Добавить товар в заказ" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "Заказ {order_uuid} не найден" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "Удалить продукт из заказа" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "Удалить все товары из заказа" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "Купить заказ" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "" -"Пожалуйста, укажите либо order_uuid, либо order_hr_id - взаимоисключающие " -"варианты!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "Выполните действие над списком товаров в заказе" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "Удалить/добавить" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "Действие должно быть либо \"добавить\", либо \"удалить\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "Добавить товар в заказ" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "Список желаний {wishlist_uuid} не найден" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "Удалить продукт из заказа" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "Удалить продукт из заказа" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "Удалить продукт из заказа" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "Купить заказ" - -#: core/graphene/mutations.py:456 -msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "" -"Пожалуйста, отправьте атрибуты в виде строки, отформатированной как " -"attr1=value1,attr2=value2" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "Оригинальная строка адреса, предоставленная пользователем" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} не существует: {uuid}" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "Предел должен быть от 1 до 10" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - работает как шарм" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "Атрибуты" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "Сгруппированные атрибуты" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "Группы атрибутов" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "Категории" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "Бренды" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "Категории" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "Процент наценки" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "" -"Какие атрибуты и значения можно использовать для фильтрации этой категории." - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "" -"Минимальные и максимальные цены на товары в этой категории, если они " -"доступны." - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "Теги для этой категории" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "Продукты в этой категории" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "Поставщики" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "Широта (координата Y)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "Долгота (координата X)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "Как" - -#: core/graphene/object_types.py:262 -msgid "rating value from 1 to 10, inclusive, or 0 if not set." -msgstr "" -"Значение рейтинга от 1 до 10, включительно, или 0, если он не установлен." - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "Представляет собой отзыв пользователя." - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "Уведомления" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "Если применимо, загрузите url для этого продукта заказа" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "Список товаров, заказанных в этом заказе" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "Адрес для выставления счетов" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "" -"Адрес доставки для данного заказа, оставьте пустым, если он совпадает с " -"адресом выставления счета или не применяется" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "Общая стоимость этого заказа" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "Общее количество продуктов в заказе" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "Все ли товары в заказе представлены в цифровом виде" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "Заказы" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "URL-адрес изображения" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "Изображения товара" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "Категория" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "Отзывы" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "Бренд" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "Группы атрибутов" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "Цена" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "Количество" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "Количество отзывов" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "Товары" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "Промокоды" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "Продукты в продаже" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "Промоакции" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "Поставщик" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "Товар" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "Продукты из списка желаний" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "Списки желаний" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "Tagged products" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "Теги товара" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "Категории с метками" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "Теги категорий" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "Название проекта" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "Электронная почта компании" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "Название компании" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "Адрес компании" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "Номер телефона компании" - -#: core/graphene/object_types.py:506 -msgid "email from, sometimes it must be used instead of host user value" -msgstr "" -"'email from', иногда его нужно использовать вместо значения пользователя " -"хоста." - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "Пользователь узла электронной почты" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "Максимальная сумма для оплаты" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "Минимальная сумма для оплаты" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "Аналитические данные" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "Рекламные данные" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "Конфигурация" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "Код языка" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "Название языка" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "Языковой флаг, если он существует :)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "Получите список поддерживаемых языков" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "Результаты поиска товаров" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "Результаты поиска товаров" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "Родитель этой группы" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "Родительская группа атрибутов" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "Имя группы атрибутов" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "Группа атрибутов" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "" -"Хранит учетные данные и конечные точки, необходимые для взаимодействия с API " -"поставщика." - -#: core/models.py:148 -msgid "authentication info" -msgstr "Информация об аутентификации" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "Определите наценку для товаров, полученных от этого продавца" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "Процент наценки поставщика" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "Имя этого продавца" - -#: core/models.py:159 -msgid "vendor name" -msgstr "Название поставщика" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "Внутренний идентификатор тега для тега продукта" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "Название тега" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "Удобное название для метки продукта" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "Отображаемое имя тега" - -#: core/models.py:213 -msgid "product tag" -msgstr "Метка продукта" - -#: core/models.py:251 -msgid "category tag" -msgstr "тег категории" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "теги категорий" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "Загрузите изображение, представляющее эту категорию" - -#: core/models.py:332 -msgid "category image" -msgstr "Изображение категории" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "Определите процент наценки для товаров в этой категории" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "Родитель данной категории для формирования иерархической структуры" - -#: core/models.py:347 -msgid "parent category" -msgstr "Родительская категория" - -#: core/models.py:352 -msgid "category name" -msgstr "Название категории" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "Укажите название этой категории" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "Добавьте подробное описание для этой категории" - -#: core/models.py:361 -msgid "category description" -msgstr "Описание категории" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "теги, которые помогают описать или сгруппировать эту категорию" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "Приоритет" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "Название этой марки" - -#: core/models.py:430 -msgid "brand name" -msgstr "Название бренда" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "Загрузите логотип, представляющий этот бренд" - -#: core/models.py:439 -msgid "brand small image" -msgstr "Маленький образ бренда" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "Загрузите большой логотип, представляющий этот бренд" - -#: core/models.py:447 -msgid "brand big image" -msgstr "Большой имидж бренда" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "Добавьте подробное описание бренда" - -#: core/models.py:453 -msgid "brand description" -msgstr "Описание бренда" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" - -#: core/models.py:459 -msgid "associated categories" -msgstr "Категории" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "Категория, к которой относится этот продукт" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "По желанию ассоциируйте этот продукт с брендом" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "Теги, которые помогают описать или сгруппировать этот продукт" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "Указывает, поставляется ли этот продукт в цифровом виде" - -#: core/models.py:549 -msgid "is product digital" -msgstr "Является ли продукт цифровым" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "Обеспечьте четкое идентификационное название продукта" - -#: core/models.py:556 -msgid "product name" -msgstr "Название продукта" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "Добавьте подробное описание продукта" - -#: core/models.py:562 -msgid "product description" -msgstr "Описание товара" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "Парт. номер для данного товара" - -#: core/models.py:570 -msgid "part number" -msgstr "Парт. номер" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "Категория этого атрибута" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "Группа этого атрибута" - -#: core/models.py:690 -msgid "string" -msgstr "Строка" - -#: core/models.py:691 -msgid "integer" -msgstr "Целое число" - -#: core/models.py:692 -msgid "float" -msgstr "Поплавок" - -#: core/models.py:693 -msgid "boolean" -msgstr "Булево" - -#: core/models.py:694 -msgid "array" -msgstr "Массив" - -#: core/models.py:695 -msgid "object" -msgstr "Объект" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "Тип значения атрибута" - -#: core/models.py:698 -msgid "value type" -msgstr "Тип значения" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "Имя этого атрибута" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "Имя атрибута" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "Атрибут" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "Атрибут этого значения" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "Конкретный продукт, связанный со значением этого атрибута" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "Сопутствующий товар" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "Конкретное значение для этого атрибута" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "" -"Предоставьте альтернативный текст для изображения, чтобы обеспечить " -"доступность" - -#: core/models.py:795 -msgid "image alt text" -msgstr "Альтовый текст изображения" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "Загрузите файл изображения для этого продукта" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "Изображение продукта" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "Определяет порядок отображения изображений" - -#: core/models.py:806 -msgid "display priority" -msgstr "Приоритет отображения" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "Продукт, который представлен на этом изображении" - -#: core/models.py:825 -msgid "product images" -msgstr "Изображения товаров" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "Процентная скидка на выбранные продукты" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "Процент скидки" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "Укажите уникальное имя для этой акции" - -#: core/models.py:873 -msgid "promotion name" -msgstr "Название акции" - -#: core/models.py:879 -msgid "promotion description" -msgstr "Описание акции" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "Выберите, какие продукты участвуют в этой акции" - -#: core/models.py:885 -msgid "included products" -msgstr "Включенные продукты" - -#: core/models.py:889 -msgid "promotion" -msgstr "Продвижение" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "Поставщик, поставляющий данный товар на склад" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "Ассоциированный поставщик" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "Окончательная цена для покупателя после наценок" - -#: core/models.py:930 -msgid "selling price" -msgstr "Цена продажи" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "Продукт, связанный с этой складской записью" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "Цена, уплаченная продавцу за этот продукт" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "Цена покупки у поставщика" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "Доступное количество продукта на складе" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "Количество на складе" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "Присвоенный поставщиком SKU для идентификации продукта" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "SKU поставщика" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "Цифровой файл, связанный с этой акцией, если применимо" - -#: core/models.py:961 -msgid "digital file" -msgstr "Цифровой файл" - -#: core/models.py:970 -msgid "stock entries" -msgstr "Наличия" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "Продукты, которые пользователь отметил как желаемые" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "Пользователь, владеющий этим списком желаний" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "Владелец вишлиста" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "Список желаний" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} не существует: {product_uuid}" - -#: core/models.py:1071 -msgid "documentary" -msgstr "Документальный фильм" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "Документальные фильмы" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "Неразрешенные" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "Адресная строка для клиента" - -#: core/models.py:1129 -msgid "address line" -msgstr "Адресная строка" - -#: core/models.py:1131 -msgid "street" -msgstr "Улица" - -#: core/models.py:1132 -msgid "district" -msgstr "Округ" - -#: core/models.py:1133 -msgid "city" -msgstr "Город" - -#: core/models.py:1134 -msgid "region" -msgstr "Регион" - -#: core/models.py:1135 -msgid "postal code" -msgstr "Почтовый индекс" - -#: core/models.py:1136 -msgid "country" -msgstr "Страна" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "Геолокационная точка(долгота, широта)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "Полный JSON-ответ от геокодера для этого адреса" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "Сохраненный JSON-ответ от сервиса геокодирования" - -#: core/models.py:1159 -msgid "address" -msgstr "Адрес" - -#: core/models.py:1160 -msgid "addresses" -msgstr "Адреса" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "Уникальный код, используемый пользователем для получения скидки" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "Идентификатор промо-кода" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "Фиксированная сумма скидки" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "" -"Процентная скидка, применяемая, если фиксированная сумма не используется" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "Процентная скидка" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "Временная метка, когда истекает срок действия промокода" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "Время окончания срока действия" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "Время, с которого действует этот промокод" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "Время начала действия" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "" -"Временная метка, когда был использован промокод, пустая, если он еще не " -"использовался" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "Временная метка использования" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "Пользователь, назначенный на этот промокод, если применимо" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "Назначенный пользователь" - -#: core/models.py:1252 -msgid "promo code" -msgstr "Промокод" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "Промокоды" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"Следует определить только один тип скидки (сумма или процент), но не оба или " -"ни один из них." - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "Промокоды" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "Неверный тип скидки для промокода {self.uuid}" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "Адрес для выставления счетов, используемый для данного заказа" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "Дополнительный промокод, применяемый к этому заказу" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "Примененный промокод" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "Адрес доставки, используемый для данного заказа" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "Адрес доставки" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "Текущий статус заказа в его жизненном цикле" - -#: core/models.py:1349 -msgid "order status" -msgstr "Статус заказа" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "" -"JSON-структура уведомлений для отображения пользователям, в административном " -"интерфейсе используется табличный вид" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "JSON-представление атрибутов заказа для этого заказа" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "Пользователь, разместивший заказ" - -#: core/models.py:1367 -msgid "user" -msgstr "Пользователь" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "Временная метка, когда заказ был завершен" - -#: core/models.py:1374 -msgid "buy time" -msgstr "Время покупки" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "Человекочитаемый идентификатор для заказа" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "человекочитаемый идентификатор" - -#: core/models.py:1388 -msgid "order" -msgstr "Заказать" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "Пользователь может одновременно иметь только один отложенный ордер!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "Вы не можете добавить товары в заказ, который не является отложенным." - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "Вы не можете добавить неактивные товары в заказ" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "Вы не можете добавить больше товаров, чем есть на складе" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "Вы не можете удалить товары из заказа, который не является отложенным." - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "{name} не существует в запросе <{query}>." - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "Промокод не существует" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "" -"Вы можете купить физические товары только с указанным адресом доставки!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "Адрес не существует" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "" -"В данный момент вы не можете совершить покупку, пожалуйста, повторите " -"попытку через несколько минут." - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "Недопустимое значение силы" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "Вы не можете приобрести пустой заказ!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "Недостаточно средств для выполнения заказа" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "" -"Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " -"информацию: имя клиента, электронная почта клиента, номер телефона клиента" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "" -"Неверный способ оплаты: {payment_method} от {available_payment_methods}!" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "Покупная цена на момент заказа" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "Внутренние комментарии для администраторов об этом заказанном продукте" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "Внутренние комментарии" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "Уведомления пользователей" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "JSON-представление атрибутов этого элемента" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "Атрибуты заказанного продукта" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "Ссылка на родительский заказ, содержащий данный продукт" - -#: core/models.py:1758 -msgid "parent order" -msgstr "Родительский приказ" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "Конкретный продукт, связанный с этой линией заказа" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "Количество данного товара в заказе" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "Количество продукта" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "Текущий статус этого продукта в заказе" - -#: core/models.py:1783 -msgid "product line status" -msgstr "Состояние продуктовой линейки" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "указано неверное действие для обратной связи: {action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "Вы не можете отозвать заказ, который не был получен" - -#: core/models.py:1882 -msgid "download" -msgstr "Скачать" - -#: core/models.py:1883 -msgid "downloads" -msgstr "Скачать" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Вы не можете загрузить цифровой актив для незавершенного заказа" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "Комментарии пользователей об их опыте использования продукта" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "Комментарии к отзывам" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "" -"Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" - -#: core/models.py:1930 -msgid "related order product" -msgstr "Сопутствующий товар для заказа" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "Присвоенный пользователем рейтинг продукта" - -#: core/models.py:1936 -msgid "product rating" -msgstr "Рейтинг продукции" - -#: core/models.py:1944 -msgid "feedback" -msgstr "Обратная связь" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "" -"чтобы добавить отзыв, необходимо указать комментарий, рейтинг и uuid " -"продукта заказа." - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "Ошибка при создании промокода: {e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "Подтверждение заказа" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "Логотип" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "Здравствуйте %(order.user.first_name)s," - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"Благодарим вас за заказ #%(order.pk)s! Мы рады сообщить Вам, что приняли Ваш " -"заказ в работу. Ниже приведены детали вашего заказа:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "Всего" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "Общая цена" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -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." - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "С наилучшими пожеланиями,
команда %(config.PROJECT_NAME)s" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "Все права защищены" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "Заказ доставлен" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "Здравствуйте, %(user_first_name)s," - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "" -"Мы успешно обработали ваш заказ №%(order_uuid)s! Ниже приведены детали " -"вашего заказа:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"дополнительная\n" -" информация" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "Значение" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "" -"Если у вас возникнут вопросы, обращайтесь в нашу службу поддержки по адресу " -"%(contact_email)s." - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "С наилучшими пожеланиями,
команда %(project_name)s" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "Ключ" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" -" the details of your order:" -msgstr "" -"Спасибо за ваш заказ! Мы рады подтвердить вашу покупку. Ниже приведены " -"детали вашего заказа:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "Цена доставки" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "Ваш заказ будет доставлен по следующему адресу:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "С наилучшими пожеланиями,
команда %(config.PROJECT_NAME)s" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"все права\n" -" защищены" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "Требуются как данные, так и тайм-аут" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "" -"Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до " -"216000 секунд" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model} должна быть моделью" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} должен быть объектом списка" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME} | Свяжитесь с нами" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | Подтверждение заказа" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME} | Заказ доставлен" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "У вас нет разрешения на выполнение этого действия." - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "Параметр NOMINATIM_URL должен быть настроен!" - -#: 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} пикселей" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "Неверный формат телефонного номера" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "Вы можете загрузить цифровой актив только один раз" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "favicon не найден" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "Ошибка геокодирования: {e}" diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo deleted file mode 100644 index e15f5f93..00000000 Binary files a/core/locale/zh_Hans/LC_MESSAGES/django.mo and /dev/null differ diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.po b/core/locale/zh_Hans/LC_MESSAGES/django.po deleted file mode 100644 index c0bd13f3..00000000 --- a/core/locale/zh_Hans/LC_MESSAGES/django.po +++ /dev/null @@ -1,2232 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: 1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-29 17:23+0100\n" -"PO-Revision-Date: 2025-01-30 03:27+0000\n" -"Last-Translator: EGOR GORBUNOV \n" -"Language-Team: BRITISH ENGLISH \n" -"Language: zh-hans\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: core/abstract.py:12 -msgid "unique id" -msgstr "唯一 ID" - -#: core/abstract.py:13 -msgid "unique id is used to surely identify any database object" -msgstr "唯一 ID 用于确定识别任何数据库对象" - -#: core/abstract.py:20 -msgid "is active" -msgstr "处于活动状态" - -#: core/abstract.py:21 -msgid "" -"if set to false, this object can't be seen by users without needed permission" -msgstr "如果设置为 false,则没有必要权限的用户无法查看此对象" - -#: core/abstract.py:24 core/choices.py:18 -msgid "created" -msgstr "创建" - -#: core/abstract.py:24 -msgid "when the object first appeared on the database" -msgstr "对象首次出现在数据库中的时间" - -#: core/abstract.py:27 -msgid "modified" -msgstr "改装" - -#: core/abstract.py:27 -msgid "when the object was last modified" -msgstr "对象最后一次编辑的时间" - -#: core/admin.py:55 -msgid "translations" -msgstr "翻译" - -#: core/admin.py:59 -msgid "general" -msgstr "一般情况" - -#: core/admin.py:61 -msgid "relations" -msgstr "关系" - -#: core/admin.py:66 core/admin.py:68 -msgid "metadata" -msgstr "元数据" - -#: core/admin.py:75 -msgid "timestamps" -msgstr "时间戳" - -#: core/admin.py:81 core/admin.py:100 -#, python-format -msgid "activate selected %(verbose_name_plural)s" -msgstr "激活选定的 %(verbose_name_plural)s" - -#: core/admin.py:86 -#, python-format -msgid "%(verbose_name_plural)s activated successfully!" -msgstr "%(verbose_name_plural)s_激活成功!" - -#: core/admin.py:88 core/admin.py:105 -#, python-format -msgid "deactivate selected %(verbose_name_plural)s" -msgstr "停用选定的 %(verbose_name_plural)s" - -#: core/admin.py:93 -#, python-format -msgid "%(verbose_name_plural)s deactivated successfully." -msgstr "成功停用%(verbose_name_plural)s_。" - -#: core/admin.py:115 core/graphene/object_types.py:411 -#: core/graphene/object_types.py:418 core/models.py:759 core/models.py:767 -msgid "attribute value" -msgstr "属性值" - -#: core/admin.py:116 core/graphene/object_types.py:48 core/models.py:768 -msgid "attribute values" -msgstr "属性值" - -#: core/admin.py:124 -msgid "image" -msgstr "图片" - -#: core/admin.py:125 core/graphene/object_types.py:364 -msgid "images" -msgstr "图片" - -#: core/admin.py:133 core/models.py:969 -msgid "stock" -msgstr "库存" - -#: core/admin.py:134 core/graphene/object_types.py:465 -msgid "stocks" -msgstr "股票" - -#: core/admin.py:144 core/models.py:1791 -msgid "order product" -msgstr "订购产品" - -#: core/admin.py:145 core/graphene/object_types.py:290 core/models.py:1792 -msgid "order products" -msgstr "订购产品" - -#: core/admin.py:158 core/admin.py:159 -msgid "children" -msgstr "儿童" - -#: core/admin.py:471 -msgid "Config" -msgstr "配置" - -#: core/apps.py:8 -msgid "core" -msgstr "核心" - -#: core/choices.py:4 core/choices.py:20 -msgid "finished" -msgstr "完成" - -#: core/choices.py:5 core/choices.py:19 -msgid "delivering" -msgstr "交付" - -#: core/choices.py:6 -msgid "delivered" -msgstr "已交付" - -#: core/choices.py:7 -msgid "canceled" -msgstr "已取消" - -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 -msgid "failed" -msgstr "失败" - -#: core/choices.py:9 core/choices.py:15 -msgid "pending" -msgstr "待定" - -#: core/choices.py:10 -msgid "accepted" -msgstr "已接受" - -#: core/choices.py:11 -msgid "money returned" -msgstr "退还的款项" - -#: core/choices.py:17 -msgid "payment" -msgstr "付款方式" - -#: core/choices.py:21 -msgid "momental" -msgstr "时刻" - -#: core/choices.py:24 -msgid "successful" -msgstr "成功" - -#: core/docs/drf/views.py:17 core/graphene/mutations.py:35 -msgid "cache I/O" -msgstr "缓存输入/输出" - -#: core/docs/drf/views.py:19 -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 "" -"仅使用密钥从缓存中读取允许的数据。\n" -"应用密钥、数据和带验证的超时,将数据写入缓存。" - -#: core/docs/drf/views.py:32 -msgid "get a list of supported languages" -msgstr "获取支持的语言列表" - -#: core/docs/drf/views.py:41 -msgid "get application's exposable parameters" -msgstr "获取应用程序的可公开参数" - -#: core/docs/drf/views.py:48 -msgid "send a message to the support team" -msgstr "向支持团队发送信息" - -#: core/docs/drf/views.py:59 core/graphene/mutations.py:54 -msgid "request a CORSed URL" -msgstr "请求 CORSed URL。只允许使用 https。" - -#: core/docs/drf/views.py:85 -msgid "global search endpoint to query across project's tables" -msgstr "全局搜索端点可跨项目表格进行查询" - -#: core/docs/drf/views.py:91 -msgid "purchase an order as a business" -msgstr "以企业身份购买订单" - -#: core/docs/drf/views.py:98 -msgid "" -"purchase an order as a business, using the provided `products` with " -"`product_uuid` and `attributes`." -msgstr "" -"使用提供的带有 `product_uuid` 和 `attributes` 的 `products` 作为企业购买订" -"单。" - -#: core/docs/drf/viewsets.py:43 -msgid "list all attribute groups (simple view)" -msgstr "列出所有属性组(简单视图)" - -#: core/docs/drf/viewsets.py:47 -msgid "retrieve a single attribute group (detailed view)" -msgstr "检索单个属性组(详细视图)" - -#: core/docs/drf/viewsets.py:51 -msgid "create an attribute group" -msgstr "创建属性组" - -#: core/docs/drf/viewsets.py:55 -msgid "delete an attribute group" -msgstr "删除属性组" - -#: core/docs/drf/viewsets.py:59 -msgid "rewrite an existing attribute group saving non-editables" -msgstr "重写保存不可编辑的现有属性组" - -#: core/docs/drf/viewsets.py:63 -msgid "rewrite some fields of an existing attribute group saving non-editables" -msgstr "重写现有属性组的某些字段,保存不可编辑的内容" - -#: core/docs/drf/viewsets.py:70 -msgid "list all attributes (simple view)" -msgstr "列出所有属性(简单视图)" - -#: core/docs/drf/viewsets.py:74 -msgid "retrieve a single attribute (detailed view)" -msgstr "检索单个属性(详细视图)" - -#: core/docs/drf/viewsets.py:78 -msgid "create an attribute" -msgstr "创建属性" - -#: core/docs/drf/viewsets.py:82 -msgid "delete an attribute" -msgstr "删除属性" - -#: core/docs/drf/viewsets.py:86 -msgid "rewrite an existing attribute saving non-editables" -msgstr "重写现有属性,保存不可编辑属性" - -#: core/docs/drf/viewsets.py:90 -msgid "rewrite some fields of an existing attribute saving non-editables" -msgstr "重写现有属性的某些字段,保存不可编辑的内容" - -#: core/docs/drf/viewsets.py:97 -msgid "list all attribute values (simple view)" -msgstr "列出所有属性值(简单视图)" - -#: core/docs/drf/viewsets.py:101 -msgid "retrieve a single attribute value (detailed view)" -msgstr "读取单个属性值(详细视图)" - -#: core/docs/drf/viewsets.py:105 -msgid "create an attribute value" -msgstr "创建属性值" - -#: core/docs/drf/viewsets.py:109 -msgid "delete an attribute value" -msgstr "删除属性值" - -#: core/docs/drf/viewsets.py:113 -msgid "rewrite an existing attribute value saving non-editables" -msgstr "重写现有属性值,保存不可编辑属性" - -#: core/docs/drf/viewsets.py:117 -msgid "rewrite some fields of an existing attribute value saving non-editables" -msgstr "重写现有属性值的某些字段,保存不可编辑的属性值" - -#: core/docs/drf/viewsets.py:124 -msgid "list all categories (simple view)" -msgstr "列出所有类别(简单视图)" - -#: core/docs/drf/viewsets.py:128 -msgid "retrieve a single category (detailed view)" -msgstr "检索单个类别(详细视图)" - -#: core/docs/drf/viewsets.py:132 -msgid "create a category" -msgstr "创建类别" - -#: core/docs/drf/viewsets.py:136 -msgid "delete a category" -msgstr "删除类别" - -#: core/docs/drf/viewsets.py:140 -msgid "rewrite an existing category saving non-editables" -msgstr "重写现有类别,保存不可编辑内容" - -#: core/docs/drf/viewsets.py:144 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "重写现有类别的某些字段,保存不可编辑内容" - -#: core/docs/drf/viewsets.py:151 -msgid "list all orders (simple view)" -msgstr "列出所有类别(简单视图)" - -#: core/docs/drf/viewsets.py:152 -msgid "for non-staff users, only their own orders are returned." -msgstr "对于非工作人员用户,只有他们自己的订单才会被退回。" - -#: core/docs/drf/viewsets.py:158 -msgid "" -"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 中进行不区分大小写的子串搜索" - -#: core/docs/drf/viewsets.py:165 -msgid "Filter orders with buy_time >= this ISO 8601 datetime" -msgstr "过滤买入时间 >= 此 ISO 8601 日期的订单" - -#: core/docs/drf/viewsets.py:170 -msgid "Filter orders with buy_time <= this ISO 8601 datetime" -msgstr "过滤买入时间 <= 此 ISO 8601 日期的订单" - -#: core/docs/drf/viewsets.py:175 -msgid "Filter by exact order UUID" -msgstr "按准确订单 UUID 筛选" - -#: core/docs/drf/viewsets.py:180 -msgid "Filter by exact human-readable order ID" -msgstr "根据准确的人工可读订单 ID 进行筛选" - -#: core/docs/drf/viewsets.py:185 -msgid "Filter by user's email (case-insensitive exact match)" -msgstr "按用户电子邮件过滤(不区分大小写精确匹配)" - -#: core/docs/drf/viewsets.py:190 -msgid "Filter by user's UUID" -msgstr "按用户的 UUID 筛选" - -#: core/docs/drf/viewsets.py:195 -msgid "Filter by order status (case-insensitive substring match)" -msgstr "按订单状态筛选(不区分大小写的子串匹配)" - -#: core/docs/drf/viewsets.py:201 -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')." -msgstr "" -"按以下一项排序:uuid、human_readable_id、user_email、user、status、created、" -"modified、buy_time、random。前缀\"-\"表示降序(例如\"-buy_time\")。" - -#: core/docs/drf/viewsets.py:210 -msgid "retrieve a single order (detailed view)" -msgstr "检索单个类别(详细视图)" - -#: core/docs/drf/viewsets.py:214 -msgid "create an order" -msgstr "创建属性" - -#: core/docs/drf/viewsets.py:215 -msgid "doesn't work for non-staff users." -msgstr "不适用于非工作人员用户。" - -#: core/docs/drf/viewsets.py:219 -msgid "delete an order" -msgstr "删除属性" - -#: core/docs/drf/viewsets.py:223 -msgid "rewrite an existing order saving non-editables" -msgstr "重写现有类别,保存不可编辑内容" - -#: core/docs/drf/viewsets.py:227 -msgid "rewrite some fields of an existing order saving non-editables" -msgstr "重写现有类别的某些字段,保存不可编辑内容" - -#: core/docs/drf/viewsets.py:231 -msgid "purchase an order" -msgstr "订购时的购买价格" - -#: core/docs/drf/viewsets.py:233 -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\",则启动交易。" - -#: core/docs/drf/viewsets.py:245 core/graphene/mutations.py:280 -msgid "purchase an order without account creation" -msgstr "无需创建账户即可购买订单" - -#: core/docs/drf/viewsets.py:246 -msgid "finalizes the order purchase for a non-registered user." -msgstr "完成非注册用户的订单购买。" - -#: core/docs/drf/viewsets.py:254 -msgid "add product to order" -msgstr "在订单中添加产品" - -#: core/docs/drf/viewsets.py:255 -msgid "" -"adds a product to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品添加到订单中。" - -#: core/docs/drf/viewsets.py:260 -msgid "add a list of products to order, quantities will not count" -msgstr "添加要订购的产品列表,不计算数量" - -#: core/docs/drf/viewsets.py:261 -msgid "" -"adds a list of products to an order using the provided `product_uuid` and " -"`attributes`." -msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品列表添加到订单中。" - -#: core/docs/drf/viewsets.py:266 -msgid "remove product from order" -msgstr "从订单中删除产品" - -#: core/docs/drf/viewsets.py:267 -msgid "" -"removes a product from an order using the provided `product_uuid` and " -"`attributes`." -msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品。" - -#: core/docs/drf/viewsets.py:272 -msgid "remove product from order, quantities will not count" -msgstr "从订单中删除产品,不计算数量" - -#: core/docs/drf/viewsets.py:273 -msgid "" -"removes a list of products from an order using the provided `product_uuid` " -"and `attributes`" -msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品列表。" - -#: core/docs/drf/viewsets.py:281 -msgid "list all wishlists (simple view)" -msgstr "列出所有属性(简单视图)" - -#: core/docs/drf/viewsets.py:282 -msgid "for non-staff users, only their own wishlists are returned." -msgstr "对于非工作人员用户,只返回他们自己的愿望清单。" - -#: core/docs/drf/viewsets.py:286 -msgid "retrieve a single wishlist (detailed view)" -msgstr "检索单个属性(详细视图)" - -#: core/docs/drf/viewsets.py:290 -msgid "create an wishlist" -msgstr "创建属性" - -#: core/docs/drf/viewsets.py:291 -msgid "Doesn't work for non-staff users." -msgstr "不适用于非工作人员用户。" - -#: core/docs/drf/viewsets.py:295 -msgid "delete an wishlist" -msgstr "删除属性" - -#: core/docs/drf/viewsets.py:299 -msgid "rewrite an existing wishlist saving non-editables" -msgstr "重写现有属性,保存不可编辑属性" - -#: core/docs/drf/viewsets.py:303 -msgid "rewrite some fields of an existing wishlist saving non-editables" -msgstr "重写现有属性的某些字段,保存不可编辑的内容" - -#: core/docs/drf/viewsets.py:307 -msgid "add product to wishlist" -msgstr "在订单中添加产品" - -#: core/docs/drf/viewsets.py:308 -msgid "adds a product to an wishlist using the provided `product_uuid`" -msgstr "使用提供的 `product_uuid` 将产品添加到愿望清单中" - -#: core/docs/drf/viewsets.py:313 -msgid "remove product from wishlist" -msgstr "从愿望清单中删除产品" - -#: core/docs/drf/viewsets.py:314 -msgid "removes a product from an wishlist using the provided `product_uuid`" -msgstr "使用提供的 `product_uuid` 从愿望清单中删除产品" - -#: core/docs/drf/viewsets.py:319 -msgid "add many products to wishlist" -msgstr "将许多产品添加到愿望清单" - -#: core/docs/drf/viewsets.py:320 -msgid "adds many products to an wishlist using the provided `product_uuids`" -msgstr "使用提供的 `product_uuids` 将许多产品添加到愿望清单中" - -#: core/docs/drf/viewsets.py:325 -msgid "remove many products from wishlist" -msgstr "从订单中删除产品" - -#: core/docs/drf/viewsets.py:326 -msgid "" -"removes many products from an wishlist using the provided `product_uuids`" -msgstr "使用提供的 `product_uuids` 从愿望清单中删除多个产品" - -#: core/docs/drf/viewsets.py:333 -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" -"• **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" -"`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" -"示例 \n" -"color=exact-red`、`size=gt-10`、`features=in-[\"wifi\"、\"bluetooth\"]`、\n" -"`b64-description=icontains-aGVhdC1jb2xk`." - -#: core/docs/drf/viewsets.py:349 -msgid "list all products (simple view)" -msgstr "列出所有产品(简单视图)" - -#: core/docs/drf/viewsets.py:354 -msgid "(exact) Product UUID" -msgstr "(产品 UUID" - -#: core/docs/drf/viewsets.py:360 -msgid "(icontains) Product name" -msgstr "(图示) 产品名称" - -#: core/docs/drf/viewsets.py:366 -msgid "(list) Category names, case-insensitive" -msgstr "(列表) 类别名称,不区分大小写" - -#: core/docs/drf/viewsets.py:372 -msgid "(exact) Category UUID" -msgstr "(类别 UUID" - -#: core/docs/drf/viewsets.py:378 -msgid "(list) Tag names, case-insensitive" -msgstr "(标签名称,不区分大小写" - -#: core/docs/drf/viewsets.py:384 -msgid "(gte) Minimum stock price" -msgstr "(gte) 最低股价" - -#: core/docs/drf/viewsets.py:390 -msgid "(lte) Maximum stock price" -msgstr "(lte) 最高股价" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Only active products" -msgstr "(准确)只有活性产品" - -#: core/docs/drf/viewsets.py:402 -msgid "(iexact) Brand name" -msgstr "(iexact) 品牌名称" - -#: core/docs/drf/viewsets.py:414 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) 最低库存量" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Digital vs. physical" -msgstr "(准确)数字与实物" - -#: core/docs/drf/viewsets.py:427 -msgid "" -"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、评分、名称、标签、创建、修改、价格、随机" - -#: core/docs/drf/viewsets.py:441 -msgid "retrieve a single product (detailed view)" -msgstr "检索单个产品(详细视图)" - -#: core/docs/drf/viewsets.py:446 core/docs/drf/viewsets.py:468 -#: core/docs/drf/viewsets.py:483 core/docs/drf/viewsets.py:498 -#: core/docs/drf/viewsets.py:513 -msgid "Product UUID or slug" -msgstr "产品 UUID 或 Slug" - -#: core/docs/drf/viewsets.py:456 -msgid "create a product" -msgstr "创建产品" - -#: core/docs/drf/viewsets.py:463 -msgid "rewrite an existing product, preserving non-editable fields" -msgstr "重写现有产品,保留不可编辑字段" - -#: core/docs/drf/viewsets.py:478 -msgid "" -"update some fields of an existing product, preserving non-editable fields" -msgstr "更新现有产品的某些字段,保留不可编辑的字段" - -#: core/docs/drf/viewsets.py:493 -msgid "delete a product" -msgstr "删除产品" - -#: core/docs/drf/viewsets.py:508 -msgid "lists all permitted feedbacks for a product" -msgstr "列出产品的所有允许反馈" - -#: core/docs/drf/viewsets.py:526 -msgid "list all addresses" -msgstr "列出所有地址" - -#: core/docs/drf/viewsets.py:533 -msgid "retrieve a single address" -msgstr "检索单个地址" - -#: core/docs/drf/viewsets.py:540 -msgid "create a new address" -msgstr "创建新地址" - -#: core/docs/drf/viewsets.py:548 -msgid "delete an address" -msgstr "删除地址" - -#: core/docs/drf/viewsets.py:555 -msgid "update an entire address" -msgstr "更新整个地址" - -#: core/docs/drf/viewsets.py:563 -msgid "partially update an address" -msgstr "部分更新地址" - -#: core/docs/drf/viewsets.py:571 -msgid "autocomplete address suggestions" -msgstr "自动完成地址输入" - -#: core/docs/drf/viewsets.py:576 -msgid "raw data query string, please append with data from geo-IP endpoint" -msgstr "原始数据查询字符串,请附加来自地理 IP 端点的数据" - -#: core/docs/drf/viewsets.py:582 -msgid "limit the results amount, 1 < limit < 10, default: 5" -msgstr "限制结果数量,1 < limit < 10,默认:5" - -#: core/docs/drf/viewsets.py:595 -msgid "list all feedbacks (simple view)" -msgstr "列出所有反馈(简单视图)" - -#: core/docs/drf/viewsets.py:599 -msgid "retrieve a single feedback (detailed view)" -msgstr "检索单个反馈(详细视图)" - -#: core/docs/drf/viewsets.py:603 -msgid "create a feedback" -msgstr "创建反馈" - -#: core/docs/drf/viewsets.py:607 -msgid "delete a feedback" -msgstr "删除反馈" - -#: core/docs/drf/viewsets.py:611 -msgid "rewrite an existing feedback saving non-editables" -msgstr "重写现有的反馈,保存不可编辑的内容" - -#: core/docs/drf/viewsets.py:615 -msgid "rewrite some fields of an existing feedback saving non-editables" -msgstr "重写现有反馈的某些字段,保存不可编辑的内容" - -#: core/docs/drf/viewsets.py:622 -msgid "list all order–product relations (simple view)" -msgstr "列出所有订单-产品关系(简单视图)" - -#: core/docs/drf/viewsets.py:629 -msgid "retrieve a single order–product relation (detailed view)" -msgstr "检索单一订单-产品关系(详细视图)" - -#: core/docs/drf/viewsets.py:636 -msgid "create a new order–product relation" -msgstr "创建新的订单-产品关系" - -#: core/docs/drf/viewsets.py:643 -msgid "replace an existing order–product relation" -msgstr "替换现有的订单-产品关系" - -#: core/docs/drf/viewsets.py:650 -msgid "partially update an existing order–product relation" -msgstr "部分更新现有的订单-产品关系" - -#: core/docs/drf/viewsets.py:657 -msgid "delete an order–product relation" -msgstr "删除订单-产品关系" - -#: core/docs/drf/viewsets.py:664 -msgid "add or remove feedback on an order–product relation" -msgstr "添加或删除订单与产品关系中的反馈信息" - -#: core/elasticsearch/__init__.py:101 -msgid "no search term provided." -msgstr "未提供搜索条件。" - -#: core/filters.py:61 core/filters.py:459 core/filters.py:488 -msgid "UUID" -msgstr "UUID" - -#: core/filters.py:62 core/filters.py:353 core/filters.py:428 -msgid "Name" -msgstr "名称" - -#: core/filters.py:63 core/filters.py:429 -msgid "Categories" -msgstr "类别" - -#: core/filters.py:65 -msgid "Categories Slugs" -msgstr "类别 蛞蝓" - -#: core/filters.py:66 core/filters.py:361 -msgid "Tags" -msgstr "标签" - -#: core/filters.py:67 -msgid "Min Price" -msgstr "最低价格" - -#: core/filters.py:68 -msgid "Max Price" -msgstr "最高价格" - -#: core/filters.py:69 -msgid "Is Active" -msgstr "处于活动状态" - -#: core/filters.py:70 -msgid "Brand" -msgstr "品牌" - -#: core/filters.py:71 -msgid "Attributes" -msgstr "属性" - -#: core/filters.py:72 -msgid "Quantity" -msgstr "数量" - -#: core/filters.py:73 core/filters.py:355 core/models.py:376 core/models.py:470 -#: core/models.py:586 -msgid "Slug" -msgstr "蛞蝓" - -#: core/filters.py:74 -msgid "Is Digital" -msgstr "是数字" - -#: core/filters.py:75 -msgid "Include sub-categories" -msgstr "包括子类别" - -#: core/filters.py:147 -msgid "there must be a category_uuid to use include_subcategories flag" -msgstr "必须有 category_uuid 才能使用 include_subcategories 标志" - -#: core/filters.py:280 -msgid "Search (ID, product name or part number)" -msgstr "搜索(ID、产品名称或零件编号)" - -#: core/filters.py:283 -msgid "Bought after (inclusive)" -msgstr "之后购买(含)" - -#: core/filters.py:284 -msgid "Bought before (inclusive)" -msgstr "之前购买(含)" - -#: core/filters.py:287 core/filters.py:334 core/filters.py:490 -msgid "User email" -msgstr "用户电子邮件" - -#: core/filters.py:288 core/filters.py:335 core/filters.py:468 -#: core/filters.py:489 -msgid "User UUID" -msgstr "用户 UUID" - -#: core/filters.py:289 -msgid "Status" -msgstr "现状" - -#: core/filters.py:293 -msgid "Human Readable ID" -msgstr "人可读 ID" - -#: core/filters.py:354 -msgid "Parent" -msgstr "家长" - -#: core/filters.py:358 -msgid "Whole category(has at least 1 product or not)" -msgstr "整个类别(是否至少有 1 个产品)" - -#: core/filters.py:362 -msgid "Level" -msgstr "级别" - -#: core/filters.py:463 -msgid "Product UUID" -msgstr "产品 UUID" - -#: core/graphene/mutations.py:38 -msgid "key to look for in or set into the cache" -msgstr "在缓存中查找或设置的关键字" - -#: core/graphene/mutations.py:39 -msgid "data to store in cache" -msgstr "缓存中要存储的数据" - -#: core/graphene/mutations.py:42 -msgid "timeout in seconds to set the data for into the cache" -msgstr "将数据设置为缓存的超时(以秒为单位" - -#: core/graphene/mutations.py:45 -msgid "cached data" -msgstr "缓存数据" - -#: core/graphene/mutations.py:59 -msgid "camelized JSON data from the requested URL" -msgstr "从请求的 URL 中获取驼峰化 JSON 数据" - -#: core/graphene/mutations.py:64 core/views.py:196 -msgid "only URLs starting with http(s):// are allowed" -msgstr "只允许使用以 http(s):// 开头的 URL" - -#: core/graphene/mutations.py:79 -msgid "add a product to the order" -msgstr "在订单中添加产品" - -#: core/graphene/mutations.py:100 core/graphene/mutations.py:126 -#: core/graphene/mutations.py:228 core/graphene/mutations.py:275 -#, python-brace-format -msgid "order {order_uuid} not found" -msgstr "未找到订单 {order_uuid}" - -#: core/graphene/mutations.py:105 core/graphene/mutations.py:152 -msgid "remove a product from the order" -msgstr "从订单中删除产品" - -#: core/graphene/mutations.py:131 -msgid "remove all products from the order" -msgstr "从订单中删除所有产品" - -#: core/graphene/mutations.py:174 -msgid "buy an order" -msgstr "购买订单" - -#: core/graphene/mutations.py:201 core/graphene/mutations.py:253 -msgid "please provide either order_uuid or order_hr_id - mutually exclusive" -msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" - -#: core/graphene/mutations.py:225 core/graphene/mutations.py:442 -#: core/graphene/mutations.py:483 core/viewsets.py:341 -msgid "wrong type came from order.buy() method: {type(instance)!s}" -msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" - -#: core/graphene/mutations.py:233 -msgid "perform an action on a list of products in the order" -msgstr "对订单中的产品列表执行操作" - -#: core/graphene/mutations.py:238 -msgid "remove/add" -msgstr "删除/添加" - -#: core/graphene/mutations.py:270 -msgid "action must be either add or remove" -msgstr "操作必须是 \"添加 \"或 \"删除\"!" - -#: core/graphene/mutations.py:326 -msgid "add a product to the wishlist" -msgstr "在订单中添加产品" - -#: core/graphene/mutations.py:348 core/graphene/mutations.py:375 -#: core/graphene/mutations.py:402 core/graphene/mutations.py:445 -#, python-brace-format -msgid "wishlist {wishlist_uuid} not found" -msgstr "未找到愿望清单 {wishlist_uuid}" - -#: core/graphene/mutations.py:353 -msgid "remove a product from the wishlist" -msgstr "从订单中删除产品" - -#: core/graphene/mutations.py:380 -msgid "remove all products from the wishlist" -msgstr "从订单中删除产品" - -#: core/graphene/mutations.py:407 -msgid "buy all products from the wishlist" -msgstr "从订单中删除产品" - -#: core/graphene/mutations.py:450 -msgid "buy a product" -msgstr "购买订单" - -#: core/graphene/mutations.py:456 -msgid "" -"please send the attributes as the string formatted like attr1=value1," -"attr2=value2" -msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2" - -#: core/graphene/mutations.py:546 -msgid "original address string provided by the user" -msgstr "用户提供的原始地址字符串" - -#: core/graphene/mutations.py:580 core/viewsets.py:236 core/viewsets.py:344 -#, python-brace-format -msgid "{name} does not exist: {uuid}" -msgstr "{name} 不存在:{uuid}不存在" - -#: core/graphene/mutations.py:593 -msgid "limit must be between 1 and 10" -msgstr "限值必须在 1 和 10 之间" - -#: core/graphene/mutations.py:638 -msgid "elasticsearch - works like a charm" -msgstr "ElasticSearch - 工作起来得心应手" - -#: core/graphene/object_types.py:55 core/graphene/object_types.py:273 -#: core/graphene/object_types.py:314 core/models.py:713 core/models.py:1361 -msgid "attributes" -msgstr "属性" - -#: core/graphene/object_types.py:68 -msgid "grouped attributes" -msgstr "分组属性" - -#: core/graphene/object_types.py:75 -msgid "groups of attributes" -msgstr "属性组" - -#: core/graphene/object_types.py:89 core/graphene/object_types.py:123 -#: core/graphene/object_types.py:153 core/models.py:401 core/models.py:677 -msgid "categories" -msgstr "类别" - -#: core/graphene/object_types.py:96 core/models.py:484 -msgid "brands" -msgstr "品牌" - -#: core/graphene/object_types.py:125 -msgid "category image url" -msgstr "类别" - -#: core/graphene/object_types.py:126 core/graphene/object_types.py:221 -#: core/models.py:338 -msgid "markup percentage" -msgstr "加价百分比" - -#: core/graphene/object_types.py:129 -msgid "which attributes and values can be used for filtering this category." -msgstr "哪些属性和值可用于筛选该类别。" - -#: core/graphene/object_types.py:133 -msgid "minimum and maximum prices for products in this category, if available." -msgstr "该类别产品的最低和最高价格(如有)。" - -#: core/graphene/object_types.py:135 -msgid "tags for this category" -msgstr "此类别的标签" - -#: core/graphene/object_types.py:136 -msgid "products in this category" -msgstr "该类别中的产品" - -#: core/graphene/object_types.py:228 core/models.py:170 -msgid "vendors" -msgstr "供应商" - -#: core/graphene/object_types.py:232 -msgid "Latitude (Y coordinate)" -msgstr "纬度(Y 坐标)" - -#: core/graphene/object_types.py:233 -msgid "Longitude (X coordinate)" -msgstr "经度(X 坐标)" - -#: core/graphene/object_types.py:261 -msgid "comment" -msgstr "如何" - -#: core/graphene/object_types.py:262 -msgid "rating value from 1 to 10, inclusive, or 0 if not set." -msgstr "评级值从 1 到 10(包括 10),如果未设置,则为 0。" - -#: core/graphene/object_types.py:269 -msgid "represents feedback from a user." -msgstr "代表用户的反馈意见。" - -#: core/graphene/object_types.py:274 core/graphene/object_types.py:315 -#: core/models.py:1355 -msgid "notifications" -msgstr "通知" - -#: core/graphene/object_types.py:275 -msgid "download url for this order product if applicable" -msgstr "此订单产品的下载网址(如适用" - -#: core/graphene/object_types.py:304 -msgid "a list of order products in this order" -msgstr "该订单中的订单产品列表" - -#: core/graphene/object_types.py:306 core/models.py:1325 -msgid "billing address" -msgstr "账单地址" - -#: core/graphene/object_types.py:309 -msgid "" -"shipping address for this order, leave blank if same as billing address or " -"if not applicable" -msgstr "此订单的送货地址,如果与账单地址相同或不适用,请留空" - -#: core/graphene/object_types.py:311 -msgid "total price of this order" -msgstr "订单总价" - -#: core/graphene/object_types.py:312 -msgid "total quantity of products in order" -msgstr "订单中产品的总数量" - -#: core/graphene/object_types.py:313 -msgid "are all products in the order digital" -msgstr "订单中的所有产品都是数字产品吗?" - -#: core/graphene/object_types.py:333 core/models.py:1389 -msgid "orders" -msgstr "订单" - -#: core/graphene/object_types.py:349 -msgid "image url" -msgstr "图片 URL" - -#: core/graphene/object_types.py:356 -msgid "product's images" -msgstr "产品图片" - -#: core/graphene/object_types.py:363 core/models.py:400 core/models.py:529 -msgid "category" -msgstr "类别" - -#: core/graphene/object_types.py:365 core/models.py:1945 -msgid "feedbacks" -msgstr "反馈意见" - -#: core/graphene/object_types.py:366 core/models.py:483 core/models.py:538 -msgid "brand" -msgstr "品牌" - -#: core/graphene/object_types.py:367 core/models.py:110 -msgid "attribute groups" -msgstr "属性组" - -#: core/graphene/object_types.py:368 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 -msgid "price" -msgstr "价格" - -#: core/graphene/object_types.py:369 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 -msgid "quantity" -msgstr "数量" - -#: core/graphene/object_types.py:370 -msgid "number of feedbacks" -msgstr "反馈数量" - -#: core/graphene/object_types.py:388 core/models.py:591 -msgid "products" -msgstr "产品" - -#: core/graphene/object_types.py:436 -msgid "promocodes" -msgstr "促销代码" - -#: core/graphene/object_types.py:446 -msgid "products on sale" -msgstr "销售产品" - -#: core/graphene/object_types.py:453 core/models.py:890 -msgid "promotions" -msgstr "促销活动" - -#: core/graphene/object_types.py:457 core/models.py:169 -msgid "vendor" -msgstr "供应商" - -#: core/graphene/object_types.py:458 core/models.py:590 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 -msgid "product" -msgstr "产品" - -#: core/graphene/object_types.py:469 core/models.py:990 -msgid "wishlisted products" -msgstr "心愿单上的产品" - -#: core/graphene/object_types.py:475 core/models.py:1007 -msgid "wishlists" -msgstr "愿望清单" - -#: core/graphene/object_types.py:479 -msgid "tagged products" -msgstr "标签产品" - -#: core/graphene/object_types.py:486 core/models.py:214 core/models.py:544 -msgid "product tags" -msgstr "产品标签" - -#: core/graphene/object_types.py:490 -msgid "tagged categories" -msgstr "标签类别" - -#: core/graphene/object_types.py:497 -msgid "categories tags" -msgstr "类别标签" - -#: core/graphene/object_types.py:501 -msgid "project name" -msgstr "项目名称" - -#: core/graphene/object_types.py:502 -msgid "company email" -msgstr "公司电子邮件" - -#: core/graphene/object_types.py:503 -msgid "company name" -msgstr "公司名称" - -#: core/graphene/object_types.py:504 -msgid "company address" -msgstr "公司地址" - -#: core/graphene/object_types.py:505 -msgid "company phone number" -msgstr "公司电话号码" - -#: core/graphene/object_types.py:506 -msgid "email from, sometimes it must be used instead of host user value" -msgstr "电子邮件来自\",有时必须使用它来代替主机用户值" - -#: core/graphene/object_types.py:507 -msgid "email host user" -msgstr "电子邮件主机用户" - -#: core/graphene/object_types.py:508 -msgid "maximum amount for payment" -msgstr "最高付款额" - -#: core/graphene/object_types.py:509 -msgid "minimum amount for payment" -msgstr "最低付款额" - -#: core/graphene/object_types.py:510 -msgid "analytics data" -msgstr "分析数据" - -#: core/graphene/object_types.py:511 -msgid "advertisement data" -msgstr "广告数据" - -#: core/graphene/object_types.py:514 -msgid "company configuration" -msgstr "配置" - -#: core/graphene/object_types.py:518 -msgid "language code" -msgstr "语言代码" - -#: core/graphene/object_types.py:519 -msgid "language name" -msgstr "语言名称" - -#: core/graphene/object_types.py:520 -msgid "language flag, if exists :)" -msgstr "语言标志(如果有):)" - -#: core/graphene/object_types.py:523 -msgid "supported languages" -msgstr "获取支持的语言列表" - -#: core/graphene/object_types.py:554 core/graphene/object_types.py:555 -#: core/graphene/object_types.py:556 -msgid "products search results" -msgstr "产品搜索结果" - -#: core/graphene/object_types.py:557 -msgid "posts search results" -msgstr "产品搜索结果" - -#: core/models.py:95 -msgid "parent of this group" -msgstr "本组家长" - -#: core/models.py:96 -msgid "parent attribute group" -msgstr "父属性组" - -#: core/models.py:100 core/models.py:101 -msgid "attribute group's name" -msgstr "属性组名称" - -#: core/models.py:109 core/models.py:685 -msgid "attribute group" -msgstr "属性组" - -#: core/models.py:147 -msgid "stores credentials and endpoints required for vendor communication" -msgstr "存储供应商应用程序接口通信所需的凭证和端点" - -#: core/models.py:148 -msgid "authentication info" -msgstr "认证信息" - -#: core/models.py:153 -msgid "define the markup for products retrieved from this vendor" -msgstr "定义从该供应商获取的产品的标记" - -#: core/models.py:154 -msgid "vendor markup percentage" -msgstr "供应商加价百分比" - -#: core/models.py:158 -msgid "name of this vendor" -msgstr "供应商名称" - -#: core/models.py:159 -msgid "vendor name" -msgstr "供应商名称" - -#: core/models.py:199 core/models.py:237 -msgid "internal tag identifier for the product tag" -msgstr "产品标签的内部标签标识符" - -#: core/models.py:200 core/models.py:238 -msgid "tag name" -msgstr "标签名称" - -#: core/models.py:204 core/models.py:242 -msgid "user-friendly name for the product tag" -msgstr "方便用户使用的产品标签名称" - -#: core/models.py:205 core/models.py:243 -msgid "tag display name" -msgstr "标签显示名称" - -#: core/models.py:213 -msgid "product tag" -msgstr "产品标签" - -#: core/models.py:251 -msgid "category tag" -msgstr "类别标签" - -#: core/models.py:252 core/models.py:382 -msgid "category tags" -msgstr "类别标签" - -#: core/models.py:329 -msgid "upload an image representing this category" -msgstr "上传代表该类别的图片" - -#: core/models.py:332 -msgid "category image" -msgstr "类别 图像" - -#: core/models.py:337 -msgid "define a markup percentage for products in this category" -msgstr "定义该类别产品的加价百分比" - -#: core/models.py:346 -msgid "parent of this category to form a hierarchical structure" -msgstr "该类别的父类别,形成等级结构" - -#: core/models.py:347 -msgid "parent category" -msgstr "父类" - -#: core/models.py:352 -msgid "category name" -msgstr "类别名称" - -#: core/models.py:353 -msgid "provide a name for this category" -msgstr "提供该类别的名称" - -#: core/models.py:360 -msgid "add a detailed description for this category" -msgstr "为该类别添加详细说明" - -#: core/models.py:361 -msgid "category description" -msgstr "类别说明" - -#: core/models.py:381 -msgid "tags that help describe or group this category" -msgstr "有助于描述或归类该类别的标签" - -#: core/models.py:388 core/models.py:476 -msgid "priority" -msgstr "优先权" - -#: core/models.py:429 -msgid "name of this brand" -msgstr "品牌名称" - -#: core/models.py:430 -msgid "brand name" -msgstr "品牌名称" - -#: core/models.py:437 -msgid "upload a logo representing this brand" -msgstr "上传代表该品牌的徽标" - -#: core/models.py:439 -msgid "brand small image" -msgstr "品牌小形象" - -#: core/models.py:445 -msgid "upload a big logo representing this brand" -msgstr "上传代表该品牌的大徽标" - -#: core/models.py:447 -msgid "brand big image" -msgstr "品牌大形象" - -#: core/models.py:452 -msgid "add a detailed description of the brand" -msgstr "添加品牌的详细描述" - -#: core/models.py:453 -msgid "brand description" -msgstr "品牌描述" - -#: core/models.py:458 -msgid "optional categories that this brand is associated with" -msgstr "与该品牌相关的可选类别" - -#: core/models.py:459 -msgid "associated categories" -msgstr "类别" - -#: core/models.py:528 -msgid "category this product belongs to" -msgstr "该产品所属类别" - -#: core/models.py:537 -msgid "optionally associate this product with a brand" -msgstr "可选择将该产品与某个品牌联系起来" - -#: core/models.py:543 -msgid "tags that help describe or group this product" -msgstr "有助于描述或归类该产品的标签" - -#: core/models.py:548 -msgid "indicates whether this product is digitally delivered" -msgstr "表示该产品是否以数字方式交付" - -#: core/models.py:549 -msgid "is product digital" -msgstr "产品是否数字化" - -#: core/models.py:555 -msgid "provide a clear identifying name for the product" -msgstr "为产品提供一个明确的标识名称" - -#: core/models.py:556 -msgid "product name" -msgstr "产品名称" - -#: core/models.py:561 core/models.py:878 -msgid "add a detailed description of the product" -msgstr "添加产品的详细描述" - -#: core/models.py:562 -msgid "product description" -msgstr "产品说明" - -#: core/models.py:569 -msgid "part number for this product" -msgstr "该产品的零件编号" - -#: core/models.py:570 -msgid "part number" -msgstr "部件编号" - -#: core/models.py:676 -msgid "category of this attribute" -msgstr "该属性的类别" - -#: core/models.py:684 -msgid "group of this attribute" -msgstr "该属性的组" - -#: core/models.py:690 -msgid "string" -msgstr "字符串" - -#: core/models.py:691 -msgid "integer" -msgstr "整数" - -#: core/models.py:692 -msgid "float" -msgstr "浮动" - -#: core/models.py:693 -msgid "boolean" -msgstr "布尔型" - -#: core/models.py:694 -msgid "array" -msgstr "阵列" - -#: core/models.py:695 -msgid "object" -msgstr "对象" - -#: core/models.py:697 -msgid "type of the attribute's value" -msgstr "属性值的类型" - -#: core/models.py:698 -msgid "value type" -msgstr "价值类型" - -#: core/models.py:703 -msgid "name of this attribute" -msgstr "该属性的名称" - -#: core/models.py:704 -msgid "attribute's name" -msgstr "属性名称" - -#: core/models.py:712 core/models.py:747 -#: core/templates/digital_order_delivered_email.html:135 -msgid "attribute" -msgstr "属性" - -#: core/models.py:746 -msgid "attribute of this value" -msgstr "该值的属性" - -#: core/models.py:754 -msgid "the specific product associated with this attribute's value" -msgstr "与该属性值相关的特定产品" - -#: core/models.py:755 core/models.py:812 core/models.py:936 core/models.py:1768 -msgid "associated product" -msgstr "相关产品" - -#: core/models.py:760 -msgid "the specific value for this attribute" -msgstr "该属性的具体值" - -#: core/models.py:794 -msgid "provide alternative text for the image for accessibility" -msgstr "为图像提供替代文字,以便于访问" - -#: core/models.py:795 -msgid "image alt text" -msgstr "图片 alt 文本" - -#: core/models.py:798 -msgid "upload the image file for this product" -msgstr "上传该产品的图片文件" - -#: core/models.py:799 core/models.py:824 -msgid "product image" -msgstr "产品图片" - -#: core/models.py:805 -msgid "determines the order in which images are displayed" -msgstr "确定图像的显示顺序" - -#: core/models.py:806 -msgid "display priority" -msgstr "显示优先级" - -#: core/models.py:811 -msgid "the product that this image represents" -msgstr "该图片所代表的产品" - -#: core/models.py:825 -msgid "product images" -msgstr "产品图片" - -#: core/models.py:866 -msgid "percentage discount for the selected products" -msgstr "所选产品的折扣百分比" - -#: core/models.py:867 -msgid "discount percentage" -msgstr "折扣百分比" - -#: core/models.py:872 -msgid "provide a unique name for this promotion" -msgstr "为该促销活动提供一个独特的名称" - -#: core/models.py:873 -msgid "promotion name" -msgstr "推广名称" - -#: core/models.py:879 -msgid "promotion description" -msgstr "促销说明" - -#: core/models.py:884 -msgid "select which products are included in this promotion" -msgstr "选择促销活动包括哪些产品" - -#: core/models.py:885 -msgid "included products" -msgstr "包括产品" - -#: core/models.py:889 -msgid "promotion" -msgstr "促销活动" - -#: core/models.py:924 -msgid "the vendor supplying this product stock" -msgstr "提供该产品库存的供应商" - -#: core/models.py:925 -msgid "associated vendor" -msgstr "相关供应商" - -#: core/models.py:929 -msgid "final price to the customer after markups" -msgstr "加价后给客户的最终价格" - -#: core/models.py:930 -msgid "selling price" -msgstr "销售价格" - -#: core/models.py:935 -msgid "the product associated with this stock entry" -msgstr "与该库存条目相关的产品" - -#: core/models.py:943 -msgid "the price paid to the vendor for this product" -msgstr "为该产品支付给供应商的价格" - -#: core/models.py:944 -msgid "vendor purchase price" -msgstr "供应商购买价格" - -#: core/models.py:948 -msgid "available quantity of the product in stock" -msgstr "产品的可用库存量" - -#: core/models.py:949 -msgid "quantity in stock" -msgstr "库存数量" - -#: core/models.py:953 -msgid "vendor-assigned SKU for identifying the product" -msgstr "供应商指定的 SKU,用于识别产品" - -#: core/models.py:954 -msgid "vendor sku" -msgstr "供应商 SKU" - -#: core/models.py:960 -msgid "digital file associated with this stock if applicable" -msgstr "与该库存相关的数字文件(如适用" - -#: core/models.py:961 -msgid "digital file" -msgstr "数字文件" - -#: core/models.py:970 -msgid "stock entries" -msgstr "库存条目" - -#: core/models.py:989 -msgid "products that the user has marked as wanted" -msgstr "用户标记为想要的产品" - -#: core/models.py:997 -msgid "user who owns this wishlist" -msgstr "拥有此愿望清单的用户" - -#: core/models.py:998 -msgid "wishlist owner" -msgstr "心愿单所有者" - -#: core/models.py:1006 -msgid "wishlist" -msgstr "愿望清单" - -#: core/models.py:1017 core/models.py:1029 core/models.py:1468 -#: core/models.py:1496 core/models.py:1520 -#, python-brace-format -msgid "{name} does not exist: {product_uuid}" -msgstr "{name} 不存在:{product_uuid} 不存在" - -#: core/models.py:1071 -msgid "documentary" -msgstr "纪录片" - -#: core/models.py:1072 -msgid "documentaries" -msgstr "纪录片" - -#: core/models.py:1082 -msgid "unresolved" -msgstr "未解决" - -#: core/models.py:1128 -msgid "address line for the customer" -msgstr "客户地址栏" - -#: core/models.py:1129 -msgid "address line" -msgstr "地址栏" - -#: core/models.py:1131 -msgid "street" -msgstr "街道" - -#: core/models.py:1132 -msgid "district" -msgstr "地区" - -#: core/models.py:1133 -msgid "city" -msgstr "城市" - -#: core/models.py:1134 -msgid "region" -msgstr "地区" - -#: core/models.py:1135 -msgid "postal code" -msgstr "邮政编码" - -#: core/models.py:1136 -msgid "country" -msgstr "国家" - -#: core/models.py:1143 -msgid "geolocation point: (longitude, latitude)" -msgstr "地理位置点(经度、纬度)" - -#: core/models.py:1146 -msgid "full JSON response from geocoder for this address" -msgstr "地理编码器对此地址的完整 JSON 响应" - -#: core/models.py:1151 -msgid "stored JSON response from the geocoding service" -msgstr "存储的来自地理编码服务的 JSON 响应" - -#: core/models.py:1159 -msgid "address" -msgstr "地址" - -#: core/models.py:1160 -msgid "addresses" -msgstr "地址" - -#: core/models.py:1205 -msgid "unique code used by a user to redeem a discount" -msgstr "用户用于兑换折扣的唯一代码" - -#: core/models.py:1206 -msgid "promo code identifier" -msgstr "促销代码标识符" - -#: core/models.py:1213 -msgid "fixed discount amount applied if percent is not used" -msgstr "如果不使用百分比,则使用固定折扣额" - -#: core/models.py:1214 -msgid "fixed discount amount" -msgstr "固定折扣额" - -#: core/models.py:1220 -msgid "percentage discount applied if fixed amount is not used" -msgstr "未使用固定金额时适用的折扣百分比" - -#: core/models.py:1221 -msgid "percentage discount" -msgstr "折扣百分比" - -#: core/models.py:1226 -msgid "timestamp when the promocode expires" -msgstr "促销代码过期的时间戳" - -#: core/models.py:1227 -msgid "end validity time" -msgstr "结束有效时间" - -#: core/models.py:1232 -msgid "timestamp from which this promocode is valid" -msgstr "该促销代码有效的时间戳" - -#: core/models.py:1233 -msgid "start validity time" -msgstr "开始有效时间" - -#: core/models.py:1238 -msgid "timestamp when the promocode was used, blank if not used yet" -msgstr "使用促销代码的时间戳,如果尚未使用,则留空" - -#: core/models.py:1239 -msgid "usage timestamp" -msgstr "使用时间戳" - -#: core/models.py:1244 -msgid "user assigned to this promocode if applicable" -msgstr "分配给此促销代码的用户(如适用" - -#: core/models.py:1245 -msgid "assigned user" -msgstr "指定用户" - -#: core/models.py:1252 -msgid "promo code" -msgstr "促销代码" - -#: core/models.py:1253 -msgid "promo codes" -msgstr "促销代码" - -#: core/models.py:1260 -msgid "" -"only one type of discount should be defined (amount or percent), but not " -"both or neither." -msgstr "" -"只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" - -#: core/models.py:1275 -msgid "promocode already used" -msgstr "促销代码已被使用" - -#: core/models.py:1288 -#, python-brace-format -msgid "invalid discount type for promocode {self.uuid}" -msgstr "促销代码 {self.uuid} 的折扣类型无效" - -#: core/models.py:1324 -msgid "the billing address used for this order" -msgstr "该订单使用的账单地址" - -#: core/models.py:1332 -msgid "optional promo code applied to this order" -msgstr "此订单可选择使用促销代码" - -#: core/models.py:1333 -msgid "applied promo code" -msgstr "应用促销代码" - -#: core/models.py:1341 -msgid "the shipping address used for this order" -msgstr "该订单使用的送货地址" - -#: core/models.py:1342 -msgid "shipping address" -msgstr "送货地址" - -#: core/models.py:1348 -msgid "current status of the order in its lifecycle" -msgstr "订单在其生命周期中的当前状态" - -#: core/models.py:1349 -msgid "order status" -msgstr "订单状态" - -#: core/models.py:1354 core/models.py:1745 -msgid "json structure of notifications to display to users" -msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" - -#: core/models.py:1360 -msgid "json representation of order attributes for this order" -msgstr "该订单属性的 JSON 表示形式" - -#: core/models.py:1366 -msgid "the user who placed the order" -msgstr "下订单的用户" - -#: core/models.py:1367 -msgid "user" -msgstr "用户" - -#: core/models.py:1373 -msgid "the timestamp when the order was finalized" -msgstr "订单确定的时间戳" - -#: core/models.py:1374 -msgid "buy time" -msgstr "购买时间" - -#: core/models.py:1381 -msgid "a human-readable identifier for the order" -msgstr "订单的人工可读标识符" - -#: core/models.py:1382 -msgid "human readable id" -msgstr "人类可读 ID" - -#: core/models.py:1388 -msgid "order" -msgstr "订购" - -#: core/models.py:1403 -msgid "a user must have only one pending order at a time" -msgstr "用户每次只能有一个挂单!" - -#: core/models.py:1437 -msgid "you cannot add products to an order that is not a pending one" -msgstr "您不能向非待处理订单添加产品" - -#: core/models.py:1442 -msgid "you cannot add inactive products to order" -msgstr "您不能在订单中添加非活动产品" - -#: core/models.py:1459 -msgid "you cannot add more products than available in stock" -msgstr "添加的产品数量不能超过现有库存" - -#: core/models.py:1480 core/models.py:1504 core/models.py:1512 -msgid "you cannot remove products from an order that is not a pending one" -msgstr "您不能从非待处理订单中删除产品" - -#: core/models.py:1500 -#, python-brace-format -msgid "{name} does not exist with query <{query}>" -msgstr "查询 <{query}> 时 {name} 不存在" - -#: core/models.py:1531 -msgid "promocode does not exist" -msgstr "促销代码不存在" - -#: core/models.py:1540 -msgid "you can only buy physical products with shipping address specified" -msgstr "您只能购买指定送货地址的实物产品!" - -#: core/models.py:1559 -msgid "address does not exist" -msgstr "地址不存在" - -#: core/models.py:1570 core/models.py:1613 -msgid "you can not buy at this moment, please try again in a few minutes" -msgstr "您现在无法购买,请稍后再试。" - -#: core/models.py:1573 -msgid "invalid force value" -msgstr "力值无效" - -#: core/models.py:1578 core/models.py:1616 -msgid "you cannot purchase an empty order!" -msgstr "您不能购买空单!" - -#: core/models.py:1593 -msgid "insufficient funds to complete the order" -msgstr "资金不足,无法完成订单" - -#: core/models.py:1625 -msgid "" -"you cannot buy without registration, please provide the following " -"information: customer name, customer email, customer phone number" -msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" - -#: core/models.py:1634 -#, python-brace-format -msgid "" -"invalid payment method: {payment_method} from {available_payment_methods}" -msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" - -#: core/models.py:1733 -msgid "the price paid by the customer for this product at purchase time" -msgstr "客户购买该产品时支付的价格" - -#: core/models.py:1734 -msgid "purchase price at order time" -msgstr "订购时的购买价格" - -#: core/models.py:1739 -msgid "internal comments for admins about this ordered product" -msgstr "管理员对该订购产品的内部评论" - -#: core/models.py:1740 -msgid "internal comments" -msgstr "内部意见" - -#: core/models.py:1746 -msgid "user notifications" -msgstr "用户通知" - -#: core/models.py:1751 -msgid "json representation of this item's attributes" -msgstr "该项属性的 JSON 表示形式" - -#: core/models.py:1752 -msgid "ordered product attributes" -msgstr "有序的产品属性" - -#: core/models.py:1757 -msgid "reference to the parent order that contains this product" -msgstr "对包含该产品的父订单的引用" - -#: core/models.py:1758 -msgid "parent order" -msgstr "父顺序" - -#: core/models.py:1767 -msgid "the specific product associated with this order line" -msgstr "与该订单项目相关的具体产品" - -#: core/models.py:1774 -msgid "quantity of this specific product in the order" -msgstr "订单中该特定产品的数量" - -#: core/models.py:1775 -msgid "product quantity" -msgstr "产品数量" - -#: core/models.py:1782 -msgid "current status of this product in the order" -msgstr "订单中该产品的当前状态" - -#: core/models.py:1783 -msgid "product line status" -msgstr "产品系列状态" - -#: core/models.py:1839 -#, python-brace-format -msgid "wrong action specified for feedback: {action}" -msgstr "为反馈指定了错误的操作:{action}" - -#: core/models.py:1847 -msgid "you cannot feedback an order which is not received" -msgstr "您不能反馈未收到的订单" - -#: core/models.py:1882 -msgid "download" -msgstr "下载" - -#: core/models.py:1883 -msgid "downloads" -msgstr "下载" - -#: core/models.py:1891 -msgid "you can not download a digital asset for a non-finished order" -msgstr "您无法下载未完成订单的数字资产" - -#: core/models.py:1921 -msgid "user-provided comments about their experience with the product" -msgstr "用户提供的产品使用体验评论" - -#: core/models.py:1922 -msgid "feedback comments" -msgstr "反馈意见" - -#: core/models.py:1929 -msgid "references the specific product in an order that this feedback is about" -msgstr "引用该反馈意见涉及的订单中的具体产品" - -#: core/models.py:1930 -msgid "related order product" -msgstr "相关订购产品" - -#: core/models.py:1935 -msgid "user-assigned rating for the product" -msgstr "用户对产品的评分" - -#: core/models.py:1936 -msgid "product rating" -msgstr "产品评级" - -#: core/models.py:1944 -msgid "feedback" -msgstr "反馈意见" - -#: core/serializers/utility.py:87 -msgid "" -"you must provide a comment, rating, and order product uuid to add feedback." -msgstr "您必须提供评论、评级和订单产品 uuid 才能添加反馈。" - -#: core/signals.py:62 -msgid "error during promocode creation: {e!s}" -msgstr "创建促销代码时出错:{e!s}" - -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:7 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 -msgid "order confirmation" -msgstr "订单确认" - -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:95 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 -msgid "logo" -msgstr "标志" - -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 -#, python-format -msgid "hello %(order.user.first_name)s," -msgstr "您好 %(order.user.first_name)s、" - -#: core/templates/digital_order_created_email.html:102 -#, 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" -" order:" -msgstr "" -"感谢您的订单 #%(order.pk)s!我们很高兴地通知您,我们已将您的订单付诸实施。以" -"下是您的订单详情:" - -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:111 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 -msgid "total" -msgstr "总计" - -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:158 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 -msgid "total price" -msgstr "总价" - -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 -#, python-format -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 联系我们的支持人员。" - -#: core/templates/digital_order_created_email.html:133 -#, python-format -msgid "best regards,
the %(config.PROJECT_NAME)s team" -msgstr "致以最诚挚的问候,
%(config.PROJECT_NAME)s团队" - -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:172 -msgid "all rights reserved" -msgstr "保留所有权利" - -#: core/templates/digital_order_delivered_email.html:100 -msgid "order delivered" -msgstr "订单已送达" - -#: core/templates/digital_order_delivered_email.html:101 -#, python-format -msgid "hello %(user_first_name)s," -msgstr "您好 %(user_first_name)s、" - -#: core/templates/digital_order_delivered_email.html:102 -#, python-format -msgid "" -"we have successfully processed your order №%(order_uuid)s! below are the\n" -" details of your order:" -msgstr "我们已成功处理了您的订单 №%(order_uuid)s_!以下是您的订单详情:" - -#: core/templates/digital_order_delivered_email.html:129 -msgid "" -"additional\n" -" information" -msgstr "" -"其他\n" -" 附加信息" - -#: core/templates/digital_order_delivered_email.html:138 -#: core/templates/json_table_widget.html:6 -msgid "value" -msgstr "价值" - -#: core/templates/digital_order_delivered_email.html:164 -#, python-format -msgid "" -"if you have any questions, feel free to contact our support at\n" -" %(contact_email)s." -msgstr "如果您有任何问题,请随时拨打 %(contact_email)s 联系我们的支持人员。" - -#: core/templates/digital_order_delivered_email.html:166 -#, python-format -msgid "best regards,
the %(project_name)s team" -msgstr "致以最诚挚的问候,
%(project_name)s团队" - -#: core/templates/json_table_widget.html:5 -msgid "key" -msgstr "钥匙" - -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 -msgid "" -"thank you for your order! we are pleased to confirm your purchase. below " -"are\n" -" the details of your order:" -msgstr "感谢您的订购!我们很高兴确认您的购买。以下是您的订单详情:" - -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 -msgid "shipping price" -msgstr "运输价格" - -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 -msgid "your order will be delivered to the following address:" -msgstr "您的订单将送至以下地址:" - -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 -#, python-format -msgid "best regards,
The %(config.PROJECT_NAME)s team" -msgstr "谨致问候,
%(config.PROJECT_NAME)s团队" - -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 -msgid "" -"all rights\n" -" reserved" -msgstr "" -"版权所有\n" -" 保留所有权利" - -#: core/utils/caching.py:41 -msgid "both data and timeout are required" -msgstr "需要数据和超时" - -#: core/utils/caching.py:43 -msgid "invalid timeout value, it must be between 0 and 216000 seconds" -msgstr "超时值无效,必须介于 0 和 216000 秒之间" - -#: core/utils/db.py:14 -#, python-brace-format -msgid "{model} must be model" -msgstr "{model}必须是模型" - -#: core/utils/db.py:16 -#, python-brace-format -msgid "{data} must be list object" -msgstr "{data} 必须是列表对象" - -#: core/utils/emailing.py:21 -#, python-brace-format -msgid "{config.PROJECT_NAME} | contact us initiated" -msgstr "{config.PROJECT_NAME}| 联系我们" - -#: core/utils/emailing.py:57 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order confirmation" -msgstr "{config.PROJECT_NAME} | 订单确认| 订单确认" - -#: core/utils/emailing.py:89 -#, python-brace-format -msgid "{config.PROJECT_NAME} | order delivered" -msgstr "{config.PROJECT_NAME}(项目名称| 已交付订单" - -#: core/utils/messages.py:3 -msgid "you do not have permission to perform this action." -msgstr "您没有执行此操作的权限。" - -#: core/utils/nominatim.py:8 -msgid "NOMINATIM_URL must be configured." -msgstr "必须配置 NOMINATIM_URL 参数!" - -#: 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} 像素" - -#: core/validators.py:22 -msgid "invalid phone number format" -msgstr "电话号码格式无效" - -#: core/views.py:266 -msgid "you can only download the digital asset once" -msgstr "您只能下载一次数字资产" - -#: core/views.py:302 -msgid "favicon not found" -msgstr "未找到 favicon" - -#: core/viewsets.py:684 -#, python-brace-format -msgid "Geocoding error: {e}" -msgstr "地理编码错误:{e}" diff --git a/core/management/commands/__init__.py b/core/management/commands/__init__.py deleted file mode 100644 index 524885a7..00000000 --- a/core/management/commands/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.conf import settings - - -class RootDirectory: - def __init__(self): - self.label = "root" - self.path = settings.BASE_DIR / "evibes" diff --git a/core/management/commands/delete_never_ordered_products.py b/core/management/commands/delete_never_ordered_products.py deleted file mode 100644 index 885eddb3..00000000 --- a/core/management/commands/delete_never_ordered_products.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.core.management.base import BaseCommand -from django.db import transaction - -from core.models import Product - -CHUNK_SIZE = 5000 - - -class Command(BaseCommand): - help = "Delete Product rows with no OrderProduct, in batches" - - def handle(self, *args, **options): - while True: - batch_ids = list( - Product.objects.filter(orderproduct__isnull=True).values_list("pk", flat=True)[:CHUNK_SIZE] - ) - if not batch_ids: - break - with transaction.atomic(): - Product.objects.filter(pk__in=batch_ids).delete() - self.stdout.write(f"Deleted {len(batch_ids)} products…") - - self.stdout.write("✅ All unordered products removed.") diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py deleted file mode 100644 index 657d41f1..00000000 --- a/core/migrations/0001_initial.py +++ /dev/null @@ -1,996 +0,0 @@ -# Generated by Django 5.1.5 on 2025-03-10 11:38 - -import uuid - -import django.core.validators -import django.db.models.deletion -import django_extensions.db.fields -import mptt.fields -from django.db import migrations, models - -import core.utils -import core.validators - - -class Migration(migrations.Migration): - initial = True - - operations = [ - migrations.CreateModel( - name='Feedback', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('comment', models.TextField(blank=True, - help_text='user-provided comments about their experience with the product', - null=True, verbose_name='feedback comments')), - ('rating', models.FloatField(blank=True, help_text='user-assigned rating for the product', null=True, - validators=[django.core.validators.MinValueValidator(0), - django.core.validators.MaxValueValidator(10)], - verbose_name='product rating')), - ], - options={ - 'verbose_name': 'feedback', - 'verbose_name_plural': 'feedbacks', - }, - ), - migrations.CreateModel( - name='OrderProduct', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('buy_price', models.FloatField(blank=True, - help_text='the price paid by the customer for this product at purchase time', - null=True, verbose_name='purchase price at order time')), - ('comments', - models.TextField(blank=True, help_text='internal comments for admins about this ordered product', - null=True, verbose_name='internal comments')), - ('notifications', - models.JSONField(blank=True, help_text='json structure of notifications to display to users', - null=True, verbose_name='user notifications')), - ('attributes', - models.JSONField(blank=True, help_text="json representation of this item's attributes", null=True, - verbose_name='ordered product attributes')), - ('quantity', - models.PositiveIntegerField(default=1, help_text='quantity of this specific product in the order', - verbose_name='product quantity')), - ('status', models.CharField( - choices=[('FINISHED', 'finished'), ('DELIVERING', 'delivering'), ('DELIVERED', 'delivered'), - ('CANCELED', 'canceled'), ('FAILED', 'failed'), ('PENDING', 'pending'), - ('ACCEPTED', 'accepted'), ('RETURNED', 'money returned')], default='PENDING', - help_text='current status of this product in the order', max_length=128, - verbose_name='product line status')), - ], - options={ - 'verbose_name': 'order product', - 'verbose_name_plural': 'order products', - }, - ), - migrations.CreateModel( - name='Product', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('is_digital', - models.BooleanField(default=False, help_text='indicates whether this product is digitally delivered', - verbose_name='is product digital')), - ('name', models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - verbose_name='product name')), - ('name_en_GB', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_ar_AR', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_cs_CZ', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_da_DK', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_de_DE', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_en_US', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_es_ES', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_fr_FR', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_hi_IN', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_it_IT', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_ja_JP', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_kk_KZ', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_nl_NL', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_pl_PL', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_pt_BR', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_ro_RO', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_ru_RU', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('name_zh_hans', - models.CharField(help_text='provide a clear identifying name for the product', max_length=255, - null=True, verbose_name='product name')), - ('description', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_en_GB', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_ar_AR', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_cs_CZ', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_da_DK', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_de_DE', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_en_US', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_es_ES', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_fr_FR', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_hi_IN', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_it_IT', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_ja_JP', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_kk_KZ', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_nl_NL', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_pl_PL', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_pt_BR', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_ro_RO', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_ru_RU', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ('description_zh_hans', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='product description')), - ], - options={ - 'verbose_name': 'product', - 'verbose_name_plural': 'products', - }, - ), - migrations.CreateModel( - name='ProductImage', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('alt', - models.CharField(help_text='provide alternative text for the image for accessibility', max_length=255, - verbose_name='image alt text')), - ('image', models.ImageField(help_text='upload the image file for this product', - upload_to=core.utils.get_product_uuid_as_path, - verbose_name='product image')), - ('priority', - models.IntegerField(default=1, help_text='determines the order in which images are displayed', - validators=[django.core.validators.MinValueValidator(1)], - verbose_name='display priority')), - ], - options={ - 'verbose_name': 'product image', - 'verbose_name_plural': 'product images', - 'ordering': ('priority',), - }, - ), - migrations.CreateModel( - name='ProductTag', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('tag_name', models.CharField(help_text='internal tag identifier for the product tag', max_length=255, - verbose_name='tag name')), - ('name', models.CharField(help_text='user-friendly name for the product tag', max_length=255, - verbose_name='tag display name')), - ('name_en_GB', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_ar_AR', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_cs_CZ', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_da_DK', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_de_DE', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_en_US', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_es_ES', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_fr_FR', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_hi_IN', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_it_IT', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_ja_JP', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_kk_KZ', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_nl_NL', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_pl_PL', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_pt_BR', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_ro_RO', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_ru_RU', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ('name_zh_hans', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - verbose_name='tag display name')), - ], - options={ - 'verbose_name': 'product tag', - 'verbose_name_plural': 'product tags', - }, - ), - migrations.CreateModel( - name='PromoCode', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('code', models.CharField(default=core.utils.get_random_code, - help_text='unique code used by a user to redeem a discount', max_length=20, - unique=True, verbose_name='promo code identifier')), - ('discount_amount', models.DecimalField(blank=True, decimal_places=2, - help_text='fixed discount amount applied if percent is not used', - max_digits=10, null=True, - verbose_name='fixed discount amount')), - ('discount_percent', - models.IntegerField(blank=True, help_text='percentage discount applied if fixed amount is not used', - null=True, validators=[django.core.validators.MinValueValidator(1), - django.core.validators.MaxValueValidator(100)], - verbose_name='percentage discount')), - ('end_time', - models.DateTimeField(blank=True, help_text='timestamp when the promocode expires', null=True, - verbose_name='end validity time')), - ('start_time', - models.DateTimeField(blank=True, help_text='timestamp from which this promocode is valid', null=True, - verbose_name='start validity time')), - ('used_on', models.DateTimeField(blank=True, - help_text='timestamp when the promocode was used, blank if not used yet', - null=True, verbose_name='usage timestamp')), - ], - options={ - 'verbose_name': 'promo code', - 'verbose_name_plural': 'promo codes', - }, - ), - migrations.CreateModel( - name='Promotion', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('discount_percent', models.IntegerField(help_text='percentage discount for the selected products', - validators=[django.core.validators.MinValueValidator(1), - django.core.validators.MaxValueValidator(100)], - verbose_name='discount percentage')), - ('name', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, unique=True, - verbose_name='promotion name')), - ('name_en_GB', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_ar_AR', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_cs_CZ', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_da_DK', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_de_DE', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_en_US', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_es_ES', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_fr_FR', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_hi_IN', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_it_IT', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_ja_JP', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_kk_KZ', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_nl_NL', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_pl_PL', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_pt_BR', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_ro_RO', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_ru_RU', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('name_zh_hans', - models.CharField(help_text='provide a unique name for this promotion', max_length=256, null=True, - unique=True, verbose_name='promotion name')), - ('description', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_en_GB', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_ar_AR', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_cs_CZ', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_da_DK', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_de_DE', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_en_US', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_es_ES', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_fr_FR', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_hi_IN', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_it_IT', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_ja_JP', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_kk_KZ', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_nl_NL', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_pl_PL', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_pt_BR', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_ro_RO', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_ru_RU', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ('description_zh_hans', - models.TextField(blank=True, help_text='add a detailed description of the product', null=True, - verbose_name='promotion description')), - ], - options={ - 'verbose_name': 'promotion', - 'verbose_name_plural': 'promotions', - }, - ), - migrations.CreateModel( - name='Stock', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('price', models.FloatField(default=0.0, help_text='final price to the customer after markups', - verbose_name='selling price')), - ('purchase_price', - models.FloatField(default=0.0, help_text='the price paid to the vendor for this product', - verbose_name='vendor purchase price')), - ('quantity', models.IntegerField(default=0, help_text='available quantity of the product in stock', - verbose_name='quantity in stock')), - ('sku', models.CharField(help_text='vendor-assigned SKU for identifying the product', max_length=255, - verbose_name='vendor sku')), - ('digital_asset', models.FileField(blank=True, default=None, - help_text='digital file associated with this stock if applicable', - null=True, upload_to='downloadables/', verbose_name='digital file')), - ], - options={ - 'verbose_name': 'stock', - 'verbose_name_plural': 'stock entries', - }, - ), - migrations.CreateModel( - name='Vendor', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('authentication', models.JSONField(blank=True, - help_text='stores credentials and endpoints required for vendor communication', - null=True, verbose_name='authentication info')), - ('markup_percent', - models.IntegerField(default=0, help_text='define the markup for products retrieved from this vendor', - validators=[django.core.validators.MinValueValidator(0), - django.core.validators.MaxValueValidator(100)], - verbose_name='vendor markup percentage')), - ('name', models.CharField(help_text='name of this vendor', max_length=255, verbose_name='vendor name')), - ], - options={ - 'verbose_name': 'vendor', - 'verbose_name_plural': 'vendors', - }, - ), - migrations.CreateModel( - name='Wishlist', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ], - options={ - 'verbose_name': 'wishlist', - 'verbose_name_plural': 'wishlists', - }, - ), - migrations.CreateModel( - name='AttributeGroup', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('name', models.CharField(help_text="attribute group's name", max_length=255, - verbose_name="attribute group's name")), - ('name_en_GB', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_ar_AR', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_cs_CZ', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_da_DK', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_de_DE', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_en_US', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_es_ES', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_fr_FR', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_hi_IN', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_it_IT', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_ja_JP', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_kk_KZ', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_nl_NL', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_pl_PL', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_pt_BR', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_ro_RO', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_ru_RU', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('name_zh_hans', models.CharField(help_text="attribute group's name", max_length=255, null=True, - verbose_name="attribute group's name")), - ('parent', models.ForeignKey(blank=True, help_text='parent of this group', null=True, - on_delete=django.db.models.deletion.CASCADE, related_name='children', - to='core.attributegroup', verbose_name='parent attribute group')), - ], - options={ - 'verbose_name': 'attribute group', - 'verbose_name_plural': 'attribute groups', - }, - ), - migrations.CreateModel( - name='Attribute', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('value_type', models.CharField( - choices=[('string', 'string'), ('integer', 'integer'), ('float', 'float'), ('boolean', 'boolean'), - ('array', 'array'), ('object', 'object')], help_text="type of the attribute's value", - max_length=50, verbose_name='value type')), - ('name', - models.CharField(help_text='name of this attribute', max_length=255, verbose_name="attribute's name")), - ('name_en_GB', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_ar_AR', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_cs_CZ', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_da_DK', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_de_DE', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_en_US', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_es_ES', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_fr_FR', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_hi_IN', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_it_IT', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_ja_JP', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_kk_KZ', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_nl_NL', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_pl_PL', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_pt_BR', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_ro_RO', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_ru_RU', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('name_zh_hans', models.CharField(help_text='name of this attribute', max_length=255, null=True, - verbose_name="attribute's name")), - ('group', - models.ForeignKey(help_text='group of this attribute', on_delete=django.db.models.deletion.CASCADE, - related_name='attributes', to='core.attributegroup', - verbose_name='attribute group')), - ], - options={ - 'verbose_name': 'attribute', - 'verbose_name_plural': 'attributes', - }, - ), - migrations.CreateModel( - name='AttributeValue', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('value', - models.TextField(help_text='the specific value for this attribute', verbose_name='attribute value')), - ('value_en_GB', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_ar_AR', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_cs_CZ', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_da_DK', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_de_DE', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_en_US', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_es_ES', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_fr_FR', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_hi_IN', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_it_IT', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_ja_JP', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_kk_KZ', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_nl_NL', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_pl_PL', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_pt_BR', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_ro_RO', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_ru_RU', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('value_zh_hans', models.TextField(help_text='the specific value for this attribute', null=True, - verbose_name='attribute value')), - ('attribute', - models.ForeignKey(help_text='attribute of this value', on_delete=django.db.models.deletion.CASCADE, - related_name='values', to='core.attribute', verbose_name='attribute')), - ], - options={ - 'verbose_name': 'attribute value', - 'verbose_name_plural': 'attribute values', - }, - ), - migrations.CreateModel( - name='Category', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('image', models.ImageField(help_text='upload an image representing this category', null=True, - upload_to='categories/', - validators=[core.validators.validate_category_image_dimensions], - verbose_name='category image')), - ('markup_percent', - models.IntegerField(default=0, help_text='define a markup percentage for products in this category', - validators=[django.core.validators.MinValueValidator(0), - django.core.validators.MaxValueValidator(100)], - verbose_name='markup percentage')), - ('name', models.CharField(help_text='provide a name for this category', max_length=255, - verbose_name='category name')), - ('name_en_GB', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_ar_AR', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_cs_CZ', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_da_DK', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_de_DE', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_en_US', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_es_ES', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_fr_FR', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_hi_IN', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_it_IT', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_ja_JP', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_kk_KZ', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_nl_NL', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_pl_PL', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_pt_BR', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_ro_RO', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_ru_RU', models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('name_zh_hans', - models.CharField(help_text='provide a name for this category', max_length=255, null=True, - verbose_name='category name')), - ('description', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_en_GB', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_ar_AR', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_cs_CZ', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_da_DK', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_de_DE', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_en_US', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_es_ES', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_fr_FR', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_hi_IN', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_it_IT', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_ja_JP', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_kk_KZ', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_nl_NL', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_pl_PL', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_pt_BR', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_ro_RO', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_ru_RU', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('description_zh_hans', - models.TextField(blank=True, help_text='add a detailed description for this category', null=True, - verbose_name='category description')), - ('lft', models.PositiveIntegerField(editable=False)), - ('rght', models.PositiveIntegerField(editable=False)), - ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), - ('level', models.PositiveIntegerField(editable=False)), - ('parent', mptt.fields.TreeForeignKey(blank=True, - help_text='parent of this category to form a hierarchical structure', - null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='children', to='core.category', - verbose_name='parent category')), - ], - options={ - 'verbose_name': 'category', - 'verbose_name_plural': 'categories', - 'ordering': ['tree_id', 'lft'], - }, - ), - migrations.CreateModel( - name='Brand', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('name', models.CharField(help_text='name of this brand', max_length=255, verbose_name='brand name')), - ('category', - models.ForeignKey(blank=True, help_text='optional category that this brand is associated with', - null=True, on_delete=django.db.models.deletion.PROTECT, to='core.category', - verbose_name='associated category')), - ], - options={ - 'verbose_name': 'brand', - 'verbose_name_plural': 'brands', - }, - ), - migrations.AddField( - model_name='attribute', - name='categories', - field=models.ManyToManyField(help_text='category of this attribute', related_name='attributes', - to='core.category', verbose_name='categories'), - ), - migrations.CreateModel( - name='Order', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('status', models.CharField( - choices=[('PENDING', 'pending'), ('FAILED', 'failed'), ('PAYMENT', 'payment'), - ('CREATED', 'created'), ('DELIVERING', 'delivering'), ('FINISHED', 'finished')], - default='PENDING', help_text='current status of the order in its lifecycle', max_length=64, - verbose_name='order status')), - ('notifications', - models.JSONField(blank=True, help_text='json structure of notifications to display to users', - null=True, verbose_name='notifications')), - ('attributes', - models.JSONField(blank=True, help_text='json representation of order attributes for this order', - null=True, verbose_name='attributes')), - ('buy_time', - models.DateTimeField(blank=True, default=None, help_text='the timestamp when the order was finalized', - null=True, verbose_name='buy time')), - ], - options={ - 'verbose_name': 'order', - 'verbose_name_plural': 'orders', - }, - ), - ] diff --git a/core/migrations/0002_initial.py b/core/migrations/0002_initial.py deleted file mode 100644 index af993959..00000000 --- a/core/migrations/0002_initial.py +++ /dev/null @@ -1,107 +0,0 @@ -# Generated by Django 5.1.5 on 2025-03-10 11:38 - -import django.contrib.postgres.indexes -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('core', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AddField( - model_name='order', - name='user', - field=models.ForeignKey(help_text='the user who placed the order', on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL, verbose_name='user'), - ), - migrations.AddField( - model_name='orderproduct', - name='order', - field=models.ForeignKey(help_text='reference to the parent order that contains this product', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='order_products', to='core.order', verbose_name='parent order'), - ), - migrations.AddField( - model_name='feedback', - name='order_product', - field=models.OneToOneField(help_text='references the specific product in an order that this feedback is about', on_delete=django.db.models.deletion.CASCADE, to='core.orderproduct', verbose_name='related order product'), - ), - migrations.AddField( - model_name='product', - name='brand', - field=models.ForeignKey(blank=True, help_text='optionally associate this product with a brand', null=True, on_delete=django.db.models.deletion.CASCADE, to='core.brand', verbose_name='brand'), - ), - migrations.AddField( - model_name='product', - name='category', - field=models.ForeignKey(help_text='category this product belongs to', on_delete=django.db.models.deletion.CASCADE, to='core.category', verbose_name='category'), - ), - migrations.AddField( - model_name='orderproduct', - name='product', - field=models.ForeignKey(blank=True, help_text='the specific product associated with this order line', null=True, on_delete=django.db.models.deletion.PROTECT, to='core.product', verbose_name='associated product'), - ), - migrations.AddField( - model_name='attributevalue', - name='product', - field=models.ForeignKey(help_text="the specific product associated with this attribute's value", null=True, on_delete=django.db.models.deletion.CASCADE, related_name='attributes', to='core.product', verbose_name='associated product'), - ), - migrations.AddField( - model_name='productimage', - name='product', - field=models.ForeignKey(help_text='the product that this image represents', on_delete=django.db.models.deletion.CASCADE, related_name='images', to='core.product', verbose_name='associated product'), - ), - migrations.AddField( - model_name='product', - name='tags', - field=models.ManyToManyField(blank=True, help_text='tags that help describe or group this product', to='core.producttag', verbose_name='product tags'), - ), - migrations.AddField( - model_name='promocode', - name='user', - field=models.ForeignKey(blank=True, help_text='user assigned to this promocode if applicable', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='promocodes', to=settings.AUTH_USER_MODEL, verbose_name='assigned user'), - ), - migrations.AddField( - model_name='order', - name='promo_code', - field=models.ForeignKey(blank=True, help_text='optional promo code applied to this order', null=True, on_delete=django.db.models.deletion.PROTECT, to='core.promocode', verbose_name='applied promo code'), - ), - migrations.AddField( - model_name='promotion', - name='products', - field=models.ManyToManyField(blank=True, help_text='select which products are included in this promotion', to='core.product', verbose_name='included products'), - ), - migrations.AddField( - model_name='stock', - name='product', - field=models.ForeignKey(blank=True, help_text='the product associated with this stock entry', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='stocks', to='core.product', verbose_name='associated product'), - ), - migrations.AddIndex( - model_name='vendor', - index=django.contrib.postgres.indexes.GinIndex(fields=['authentication'], name='core_vendor_authent_80dc1f_gin'), - ), - migrations.AddField( - model_name='stock', - name='vendor', - field=models.ForeignKey(help_text='the vendor supplying this product stock', on_delete=django.db.models.deletion.CASCADE, to='core.vendor', verbose_name='associated vendor'), - ), - migrations.AddField( - model_name='wishlist', - name='products', - field=models.ManyToManyField(blank=True, help_text='products that the user has marked as wanted', to='core.product', verbose_name='wishlisted products'), - ), - migrations.AddField( - model_name='wishlist', - name='user', - field=models.OneToOneField(blank=True, help_text='user who owns this wishlist', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_related_wishlist', to=settings.AUTH_USER_MODEL, verbose_name='wishlist owner'), - ), - migrations.AddIndex( - model_name='orderproduct', - index=django.contrib.postgres.indexes.GinIndex(fields=['notifications', 'attributes'], name='core_orderp_notific_cd27e9_gin'), - ), - ] diff --git a/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py b/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py deleted file mode 100644 index 769a5a5f..00000000 --- a/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py +++ /dev/null @@ -1,498 +0,0 @@ -# Generated by Django 5.1.5 on 2025-03-10 12:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0002_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='attribute', - name='name', - field=models.CharField(help_text='name of this attribute', max_length=255, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_ar_AR', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_cs_CZ', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_da_DK', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_de_DE', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_en_GB', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_en_US', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_es_ES', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_fr_FR', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_hi_IN', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_it_IT', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_ja_JP', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_kk_KZ', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_nl_NL', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_pl_PL', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_pt_BR', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_ro_RO', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_ru_RU', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attribute', - name='name_zh_hans', - field=models.CharField(help_text='name of this attribute', max_length=255, null=True, unique=True, verbose_name="attribute's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name', - field=models.CharField(help_text="attribute group's name", max_length=255, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_ar_AR', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_cs_CZ', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_da_DK', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_de_DE', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_en_GB', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_en_US', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_es_ES', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_fr_FR', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_hi_IN', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_it_IT', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_ja_JP', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_kk_KZ', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_nl_NL', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_pl_PL', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_pt_BR', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_ro_RO', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_ru_RU', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='attributegroup', - name='name_zh_hans', - field=models.CharField(help_text="attribute group's name", max_length=255, null=True, unique=True, verbose_name="attribute group's name"), - ), - migrations.AlterField( - model_name='brand', - name='name', - field=models.CharField(help_text='name of this brand', max_length=255, unique=True, verbose_name='brand name'), - ), - migrations.AlterField( - model_name='category', - name='name', - field=models.CharField(help_text='provide a name for this category', max_length=255, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_ar_AR', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_cs_CZ', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_da_DK', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_de_DE', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_en_GB', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_en_US', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_es_ES', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_fr_FR', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_hi_IN', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_it_IT', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_ja_JP', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_kk_KZ', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_nl_NL', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_pl_PL', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_pt_BR', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_ro_RO', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_ru_RU', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='category', - name='name_zh_hans', - field=models.CharField(help_text='provide a name for this category', max_length=255, null=True, unique=True, verbose_name='category name'), - ), - migrations.AlterField( - model_name='product', - name='name', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ar_AR', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_cs_CZ', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_da_DK', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_de_DE', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_en_GB', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_en_US', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_es_ES', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_fr_FR', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_hi_IN', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_it_IT', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ja_JP', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_kk_KZ', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_nl_NL', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_pl_PL', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_pt_BR', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ro_RO', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ru_RU', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_zh_hans', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, unique=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='producttag', - name='name', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_ar_AR', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_cs_CZ', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_da_DK', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_de_DE', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_en_GB', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_en_US', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_es_ES', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_fr_FR', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_hi_IN', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_it_IT', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_ja_JP', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_kk_KZ', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_nl_NL', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_pl_PL', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_pt_BR', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_ro_RO', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_ru_RU', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='producttag', - name='name_zh_hans', - field=models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, unique=True, verbose_name='tag display name'), - ), - migrations.AlterField( - model_name='vendor', - name='name', - field=models.CharField(help_text='name of this vendor', max_length=255, unique=True, verbose_name='vendor name'), - ), - ] diff --git a/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py b/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py deleted file mode 100644 index 6e36c2d6..00000000 --- a/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py +++ /dev/null @@ -1,108 +0,0 @@ -# Generated by Django 5.1.5 on 2025-03-10 20:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='name', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ar_AR', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_cs_CZ', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_da_DK', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_de_DE', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_en_GB', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_en_US', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_es_ES', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_fr_FR', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_hi_IN', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_it_IT', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ja_JP', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_kk_KZ', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_nl_NL', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_pl_PL', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_pt_BR', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ro_RO', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_ru_RU', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - migrations.AlterField( - model_name='product', - name='name_zh_hans', - field=models.CharField(help_text='provide a clear identifying name for the product', max_length=255, null=True, verbose_name='product name'), - ), - ] diff --git a/core/migrations/0005_remove_brand_category_brand_categories.py b/core/migrations/0005_remove_brand_category_brand_categories.py deleted file mode 100644 index ed34cded..00000000 --- a/core/migrations/0005_remove_brand_category_brand_categories.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.1.5 on 2025-03-16 12:53 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0004_alter_product_name_alter_product_name_ar_ar_and_more'), - ] - - operations = [ - migrations.RemoveField( - model_name='brand', - name='category', - ), - migrations.AddField( - model_name='brand', - name='categories', - field=models.ManyToManyField(blank=True, help_text='optional categories that this brand is associated with', to='core.category', verbose_name='associated categories'), - ), - ] diff --git a/core/migrations/0006_alter_order_status.py b/core/migrations/0006_alter_order_status.py deleted file mode 100644 index 109fac86..00000000 --- a/core/migrations/0006_alter_order_status.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.5 on 2025-03-20 15:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0005_remove_brand_category_brand_categories'), - ] - - operations = [ - migrations.AlterField( - model_name='order', - name='status', - field=models.CharField(choices=[('PENDING', 'pending'), ('FAILED', 'failed'), ('PAYMENT', 'payment'), ('CREATED', 'created'), ('DELIVERING', 'delivering'), ('FINISHED', 'finished'), ('MOMENTAL', 'momental')], default='PENDING', help_text='current status of the order in its lifecycle', max_length=64, verbose_name='order status'), - ), - ] diff --git a/core/migrations/0007_alter_category_image.py b/core/migrations/0007_alter_category_image.py deleted file mode 100644 index 25ffc9c1..00000000 --- a/core/migrations/0007_alter_category_image.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.1.5 on 2025-03-24 14:04 - -from django.db import migrations, models - -import core.validators - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0006_alter_order_status'), - ] - - operations = [ - migrations.AlterField( - model_name='category', - name='image', - field=models.ImageField(blank=True, help_text='upload an image representing this category', null=True, - upload_to='categories/', - validators=[core.validators.validate_category_image_dimensions], - verbose_name='category image'), - ), - ] diff --git a/core/migrations/0008_digitalassetdownload.py b/core/migrations/0008_digitalassetdownload.py deleted file mode 100644 index 5739ebb5..00000000 --- a/core/migrations/0008_digitalassetdownload.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 5.1.5 on 2025-04-10 15:55 - -import uuid - -import django.db.models.deletion -import django_extensions.db.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0007_alter_category_image'), - ] - - operations = [ - migrations.CreateModel( - name='DigitalAssetDownload', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('num_downloads', models.IntegerField(default=0)), - ('order_product', - models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='download', - to='core.orderproduct')), - ], - options={ - 'verbose_name': 'download', - 'verbose_name_plural': 'downloads', - }, - ), - ] diff --git a/core/migrations/0009_documentary.py b/core/migrations/0009_documentary.py deleted file mode 100644 index d368b1c9..00000000 --- a/core/migrations/0009_documentary.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 5.1.5 on 2025-04-15 09:15 - -import uuid - -import django.db.models.deletion -import django_extensions.db.fields -from django.db import migrations, models - -import core.utils - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0008_digitalassetdownload'), - ] - - operations = [ - migrations.CreateModel( - name='Documentary', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('document', models.FileField(upload_to=core.utils.get_product_uuid_as_path)), - ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documentaries', - to='core.product')), - ], - options={ - 'verbose_name': 'documentary', - 'verbose_name_plural': 'documentaries', - }, - ), - ] diff --git a/core/migrations/0010_product_partnumber.py b/core/migrations/0010_product_partnumber.py deleted file mode 100644 index e447e697..00000000 --- a/core/migrations/0010_product_partnumber.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-17 14:22 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0009_documentary'), - ] - - operations = [ - migrations.AddField( - model_name='product', - name='partnumber', - field=models.CharField(default=None, help_text='part number for this product', null=True, unique=True, verbose_name='part number'), - ), - ] diff --git a/core/migrations/0011_brand_big_logo_brand_description_and_more.py b/core/migrations/0011_brand_big_logo_brand_description_and_more.py deleted file mode 100644 index 53e8890a..00000000 --- a/core/migrations/0011_brand_big_logo_brand_description_and_more.py +++ /dev/null @@ -1,144 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-18 11:34 - -from django.db import migrations, models - -import core.validators - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0010_product_partnumber'), - ] - - operations = [ - migrations.AddField( - model_name='brand', - name='big_logo', - field=models.ImageField(blank=True, help_text='upload a big logo representing this brand', null=True, - upload_to='brands/', - validators=[core.validators.validate_category_image_dimensions], - verbose_name='brand big image'), - ), - migrations.AddField( - model_name='brand', - name='description', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_ar_AR', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_cs_CZ', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_da_DK', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_de_DE', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_en_GB', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_en_US', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_es_ES', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_fr_FR', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_hi_IN', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_it_IT', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_ja_JP', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_kk_KZ', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_nl_NL', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_pl_PL', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_pt_BR', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_ro_RO', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_ru_RU', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='description_zh_hans', - field=models.TextField(blank=True, help_text='add a detailed description of the brand', null=True, - verbose_name='brand description'), - ), - migrations.AddField( - model_name='brand', - name='small_logo', - field=models.ImageField(blank=True, help_text='upload a logo representing this brand', null=True, - upload_to='brands/', - validators=[core.validators.validate_category_image_dimensions], - verbose_name='brand small image'), - ), - ] diff --git a/core/migrations/0012_alter_order_user.py b/core/migrations/0012_alter_order_user.py deleted file mode 100644 index 97465a31..00000000 --- a/core/migrations/0012_alter_order_user.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-28 11:56 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0011_brand_big_logo_brand_description_and_more'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AlterField( - model_name='order', - name='user', - field=models.ForeignKey(blank=True, help_text='the user who placed the order', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL, verbose_name='user'), - ), - ] diff --git a/core/migrations/0013_product_slug.py b/core/migrations/0013_product_slug.py deleted file mode 100644 index fbf8b75f..00000000 --- a/core/migrations/0013_product_slug.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-30 13:29 - -import django_extensions.db.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0012_alter_order_user'), - ] - - operations = [ - migrations.AddField( - model_name='product', - name='slug', - field=django_extensions.db.fields.AutoSlugField(allow_unicode=True, null=True, blank=True, editable=False, populate_from=('category.name', 'brand.name', 'name'), unique=True), - ), - ] diff --git a/core/migrations/0014_alter_product_slug.py b/core/migrations/0014_alter_product_slug.py deleted file mode 100644 index b1b5f7f4..00000000 --- a/core/migrations/0014_alter_product_slug.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-30 13:42 - -import django_extensions.db.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0013_product_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='slug', - field=django_extensions.db.fields.AutoSlugField(allow_unicode=True, blank=True, editable=False, null=True, populate_from=('uuid', 'category.name', 'brand.name', 'name'), unique=True), - ), - ] diff --git a/core/migrations/0015_alter_product_slug.py b/core/migrations/0015_alter_product_slug.py deleted file mode 100644 index 5cd41799..00000000 --- a/core/migrations/0015_alter_product_slug.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-30 14:03 - -import django_extensions.db.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0014_alter_product_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='slug', - field=django_extensions.db.fields.AutoSlugField(allow_unicode=True, blank=True, editable=False, null=True, populate_from=('category__name', 'name'), unique=True), - ), - ] diff --git a/core/migrations/0016_alter_product_slug.py b/core/migrations/0016_alter_product_slug.py deleted file mode 100644 index 32875776..00000000 --- a/core/migrations/0016_alter_product_slug.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.1.8 on 2025-05-05 12:56 - -import django_extensions.db.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0015_alter_product_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='slug', - field=django_extensions.db.fields.AutoSlugField(allow_unicode=True, blank=True, editable=False, null=True, populate_from=('uuid', 'category__name', 'name'), unique=True), - ), - ] diff --git a/core/migrations/0017_order_human_readable_id.py b/core/migrations/0017_order_human_readable_id.py deleted file mode 100644 index 48d73cb0..00000000 --- a/core/migrations/0017_order_human_readable_id.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 5.1.8 on 2025-05-06 13:58 - -from django.db import migrations, models - -import core.utils - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0016_alter_product_slug'), - ] - - operations = [ - migrations.AddField( - model_name='order', - name='human_readable_id', - field=models.CharField(default=core.utils.generate_human_readable_id, - help_text='a human-readable identifier for the order', max_length=8, - verbose_name='human readable id'), - ), - ] diff --git a/core/migrations/0019_address.py b/core/migrations/0019_address.py deleted file mode 100644 index 229c86c6..00000000 --- a/core/migrations/0019_address.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 5.2 on 2025-05-20 04:57 - -import uuid - -import django.contrib.gis.db.models.fields -import django.db.models.deletion -import django_extensions.db.fields -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0018_alter_order_human_readable_id'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Address', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('street', models.CharField(max_length=255, null=True, verbose_name='street')), - ('district', models.CharField(max_length=255, null=True, verbose_name='district')), - ('city', models.CharField(max_length=100, null=True, verbose_name='city')), - ('region', models.CharField(max_length=100, null=True, verbose_name='region')), - ('postal_code', models.CharField(max_length=20, null=True, verbose_name='postal code')), - ('country', models.CharField(max_length=40, null=True, verbose_name='country')), - ('location', django.contrib.gis.db.models.fields.PointField(blank=True, geography=True, - help_text='geolocation point: (longitude, latitude)', - null=True, srid=4326)), - ('raw_data', models.JSONField(blank=True, help_text='full JSON response from geocoder for this address', - null=True)), - ('api_response', - models.JSONField(blank=True, help_text='stored JSON response from the geocoding service', null=True)), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'address', - 'verbose_name_plural': 'addresses', - 'indexes': [models.Index(fields=['location'], name='core_addres_locatio_eb6b39_idx')], - }, - ), - ] diff --git a/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py b/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py deleted file mode 100644 index ca4135dd..00000000 --- a/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py +++ /dev/null @@ -1,947 +0,0 @@ -# Generated by Django 5.2 on 2025-05-20 19:06 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0020_order_billing_address_order_shipping_address'), - ] - - operations = [ - migrations.RenameField( - model_name='attribute', - old_name='name_ar_AR', - new_name='name_ar_ar', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_cs_CZ', - new_name='name_cs_cz', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_da_DK', - new_name='name_da_dk', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_de_DE', - new_name='name_de_de', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_en_GB', - new_name='name_en_gb', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_en_US', - new_name='name_en_us', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_es_ES', - new_name='name_es_es', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_fr_FR', - new_name='name_fr_fr', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_hi_IN', - new_name='name_hi_in', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_it_IT', - new_name='name_it_it', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_ja_JP', - new_name='name_ja_jp', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_kk_KZ', - new_name='name_kk_kz', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_nl_NL', - new_name='name_nl_nl', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_pl_PL', - new_name='name_pl_pl', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_pt_BR', - new_name='name_pt_br', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_ro_RO', - new_name='name_ro_ro', - ), - migrations.RenameField( - model_name='attribute', - old_name='name_ru_RU', - new_name='name_ru_ru', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_ar_AR', - new_name='name_ar_ar', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_cs_CZ', - new_name='name_cs_cz', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_da_DK', - new_name='name_da_dk', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_de_DE', - new_name='name_de_de', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_en_GB', - new_name='name_en_gb', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_en_US', - new_name='name_en_us', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_es_ES', - new_name='name_es_es', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_fr_FR', - new_name='name_fr_fr', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_hi_IN', - new_name='name_hi_in', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_it_IT', - new_name='name_it_it', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_ja_JP', - new_name='name_ja_jp', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_kk_KZ', - new_name='name_kk_kz', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_nl_NL', - new_name='name_nl_nl', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_pl_PL', - new_name='name_pl_pl', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_pt_BR', - new_name='name_pt_br', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_ro_RO', - new_name='name_ro_ro', - ), - migrations.RenameField( - model_name='attributegroup', - old_name='name_ru_RU', - new_name='name_ru_ru', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_ar_AR', - new_name='value_ar_ar', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_cs_CZ', - new_name='value_cs_cz', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_da_DK', - new_name='value_da_dk', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_de_DE', - new_name='value_de_de', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_en_GB', - new_name='value_en_gb', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_en_US', - new_name='value_en_us', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_es_ES', - new_name='value_es_es', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_fr_FR', - new_name='value_fr_fr', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_hi_IN', - new_name='value_hi_in', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_it_IT', - new_name='value_it_it', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_ja_JP', - new_name='value_ja_jp', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_kk_KZ', - new_name='value_kk_kz', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_nl_NL', - new_name='value_nl_nl', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_pl_PL', - new_name='value_pl_pl', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_pt_BR', - new_name='value_pt_br', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_ro_RO', - new_name='value_ro_ro', - ), - migrations.RenameField( - model_name='attributevalue', - old_name='value_ru_RU', - new_name='value_ru_ru', - ), - migrations.RenameField( - model_name='brand', - old_name='description_ar_AR', - new_name='description_ar_ar', - ), - migrations.RenameField( - model_name='brand', - old_name='description_cs_CZ', - new_name='description_cs_cz', - ), - migrations.RenameField( - model_name='brand', - old_name='description_da_DK', - new_name='description_da_dk', - ), - migrations.RenameField( - model_name='brand', - old_name='description_de_DE', - new_name='description_de_de', - ), - migrations.RenameField( - model_name='brand', - old_name='description_en_GB', - new_name='description_en_gb', - ), - migrations.RenameField( - model_name='brand', - old_name='description_en_US', - new_name='description_en_us', - ), - migrations.RenameField( - model_name='brand', - old_name='description_es_ES', - new_name='description_es_es', - ), - migrations.RenameField( - model_name='brand', - old_name='description_fr_FR', - new_name='description_fr_fr', - ), - migrations.RenameField( - model_name='brand', - old_name='description_hi_IN', - new_name='description_hi_in', - ), - migrations.RenameField( - model_name='brand', - old_name='description_it_IT', - new_name='description_it_it', - ), - migrations.RenameField( - model_name='brand', - old_name='description_ja_JP', - new_name='description_ja_jp', - ), - migrations.RenameField( - model_name='brand', - old_name='description_kk_KZ', - new_name='description_kk_kz', - ), - migrations.RenameField( - model_name='brand', - old_name='description_nl_NL', - new_name='description_nl_nl', - ), - migrations.RenameField( - model_name='brand', - old_name='description_pl_PL', - new_name='description_pl_pl', - ), - migrations.RenameField( - model_name='brand', - old_name='description_pt_BR', - new_name='description_pt_br', - ), - migrations.RenameField( - model_name='brand', - old_name='description_ro_RO', - new_name='description_ro_ro', - ), - migrations.RenameField( - model_name='brand', - old_name='description_ru_RU', - new_name='description_ru_ru', - ), - migrations.RenameField( - model_name='category', - old_name='description_ar_AR', - new_name='description_ar_ar', - ), - migrations.RenameField( - model_name='category', - old_name='description_cs_CZ', - new_name='description_cs_cz', - ), - migrations.RenameField( - model_name='category', - old_name='description_da_DK', - new_name='description_da_dk', - ), - migrations.RenameField( - model_name='category', - old_name='description_de_DE', - new_name='description_de_de', - ), - migrations.RenameField( - model_name='category', - old_name='description_en_GB', - new_name='description_en_gb', - ), - migrations.RenameField( - model_name='category', - old_name='description_en_US', - new_name='description_en_us', - ), - migrations.RenameField( - model_name='category', - old_name='description_es_ES', - new_name='description_es_es', - ), - migrations.RenameField( - model_name='category', - old_name='description_fr_FR', - new_name='description_fr_fr', - ), - migrations.RenameField( - model_name='category', - old_name='description_hi_IN', - new_name='description_hi_in', - ), - migrations.RenameField( - model_name='category', - old_name='description_it_IT', - new_name='description_it_it', - ), - migrations.RenameField( - model_name='category', - old_name='description_ja_JP', - new_name='description_ja_jp', - ), - migrations.RenameField( - model_name='category', - old_name='description_kk_KZ', - new_name='description_kk_kz', - ), - migrations.RenameField( - model_name='category', - old_name='description_nl_NL', - new_name='description_nl_nl', - ), - migrations.RenameField( - model_name='category', - old_name='description_pl_PL', - new_name='description_pl_pl', - ), - migrations.RenameField( - model_name='category', - old_name='description_pt_BR', - new_name='description_pt_br', - ), - migrations.RenameField( - model_name='category', - old_name='description_ro_RO', - new_name='description_ro_ro', - ), - migrations.RenameField( - model_name='category', - old_name='description_ru_RU', - new_name='description_ru_ru', - ), - migrations.RenameField( - model_name='category', - old_name='name_ar_AR', - new_name='name_ar_ar', - ), - migrations.RenameField( - model_name='category', - old_name='name_cs_CZ', - new_name='name_cs_cz', - ), - migrations.RenameField( - model_name='category', - old_name='name_da_DK', - new_name='name_da_dk', - ), - migrations.RenameField( - model_name='category', - old_name='name_de_DE', - new_name='name_de_de', - ), - migrations.RenameField( - model_name='category', - old_name='name_en_GB', - new_name='name_en_gb', - ), - migrations.RenameField( - model_name='category', - old_name='name_en_US', - new_name='name_en_us', - ), - migrations.RenameField( - model_name='category', - old_name='name_es_ES', - new_name='name_es_es', - ), - migrations.RenameField( - model_name='category', - old_name='name_fr_FR', - new_name='name_fr_fr', - ), - migrations.RenameField( - model_name='category', - old_name='name_hi_IN', - new_name='name_hi_in', - ), - migrations.RenameField( - model_name='category', - old_name='name_it_IT', - new_name='name_it_it', - ), - migrations.RenameField( - model_name='category', - old_name='name_ja_JP', - new_name='name_ja_jp', - ), - migrations.RenameField( - model_name='category', - old_name='name_kk_KZ', - new_name='name_kk_kz', - ), - migrations.RenameField( - model_name='category', - old_name='name_nl_NL', - new_name='name_nl_nl', - ), - migrations.RenameField( - model_name='category', - old_name='name_pl_PL', - new_name='name_pl_pl', - ), - migrations.RenameField( - model_name='category', - old_name='name_pt_BR', - new_name='name_pt_br', - ), - migrations.RenameField( - model_name='category', - old_name='name_ro_RO', - new_name='name_ro_ro', - ), - migrations.RenameField( - model_name='category', - old_name='name_ru_RU', - new_name='name_ru_ru', - ), - migrations.RenameField( - model_name='product', - old_name='description_ar_AR', - new_name='description_ar_ar', - ), - migrations.RenameField( - model_name='product', - old_name='description_cs_CZ', - new_name='description_cs_cz', - ), - migrations.RenameField( - model_name='product', - old_name='description_da_DK', - new_name='description_da_dk', - ), - migrations.RenameField( - model_name='product', - old_name='description_de_DE', - new_name='description_de_de', - ), - migrations.RenameField( - model_name='product', - old_name='description_en_GB', - new_name='description_en_gb', - ), - migrations.RenameField( - model_name='product', - old_name='description_en_US', - new_name='description_en_us', - ), - migrations.RenameField( - model_name='product', - old_name='description_es_ES', - new_name='description_es_es', - ), - migrations.RenameField( - model_name='product', - old_name='description_fr_FR', - new_name='description_fr_fr', - ), - migrations.RenameField( - model_name='product', - old_name='description_hi_IN', - new_name='description_hi_in', - ), - migrations.RenameField( - model_name='product', - old_name='description_it_IT', - new_name='description_it_it', - ), - migrations.RenameField( - model_name='product', - old_name='description_ja_JP', - new_name='description_ja_jp', - ), - migrations.RenameField( - model_name='product', - old_name='description_kk_KZ', - new_name='description_kk_kz', - ), - migrations.RenameField( - model_name='product', - old_name='description_nl_NL', - new_name='description_nl_nl', - ), - migrations.RenameField( - model_name='product', - old_name='description_pl_PL', - new_name='description_pl_pl', - ), - migrations.RenameField( - model_name='product', - old_name='description_pt_BR', - new_name='description_pt_br', - ), - migrations.RenameField( - model_name='product', - old_name='description_ro_RO', - new_name='description_ro_ro', - ), - migrations.RenameField( - model_name='product', - old_name='description_ru_RU', - new_name='description_ru_ru', - ), - migrations.RenameField( - model_name='product', - old_name='name_ar_AR', - new_name='name_ar_ar', - ), - migrations.RenameField( - model_name='product', - old_name='name_cs_CZ', - new_name='name_cs_cz', - ), - migrations.RenameField( - model_name='product', - old_name='name_da_DK', - new_name='name_da_dk', - ), - migrations.RenameField( - model_name='product', - old_name='name_de_DE', - new_name='name_de_de', - ), - migrations.RenameField( - model_name='product', - old_name='name_en_GB', - new_name='name_en_gb', - ), - migrations.RenameField( - model_name='product', - old_name='name_en_US', - new_name='name_en_us', - ), - migrations.RenameField( - model_name='product', - old_name='name_es_ES', - new_name='name_es_es', - ), - migrations.RenameField( - model_name='product', - old_name='name_fr_FR', - new_name='name_fr_fr', - ), - migrations.RenameField( - model_name='product', - old_name='name_hi_IN', - new_name='name_hi_in', - ), - migrations.RenameField( - model_name='product', - old_name='name_it_IT', - new_name='name_it_it', - ), - migrations.RenameField( - model_name='product', - old_name='name_ja_JP', - new_name='name_ja_jp', - ), - migrations.RenameField( - model_name='product', - old_name='name_kk_KZ', - new_name='name_kk_kz', - ), - migrations.RenameField( - model_name='product', - old_name='name_nl_NL', - new_name='name_nl_nl', - ), - migrations.RenameField( - model_name='product', - old_name='name_pl_PL', - new_name='name_pl_pl', - ), - migrations.RenameField( - model_name='product', - old_name='name_pt_BR', - new_name='name_pt_br', - ), - migrations.RenameField( - model_name='product', - old_name='name_ro_RO', - new_name='name_ro_ro', - ), - migrations.RenameField( - model_name='product', - old_name='name_ru_RU', - new_name='name_ru_ru', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_ar_AR', - new_name='name_ar_ar', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_cs_CZ', - new_name='name_cs_cz', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_da_DK', - new_name='name_da_dk', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_de_DE', - new_name='name_de_de', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_en_GB', - new_name='name_en_gb', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_en_US', - new_name='name_en_us', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_es_ES', - new_name='name_es_es', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_fr_FR', - new_name='name_fr_fr', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_hi_IN', - new_name='name_hi_in', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_it_IT', - new_name='name_it_it', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_ja_JP', - new_name='name_ja_jp', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_kk_KZ', - new_name='name_kk_kz', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_nl_NL', - new_name='name_nl_nl', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_pl_PL', - new_name='name_pl_pl', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_pt_BR', - new_name='name_pt_br', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_ro_RO', - new_name='name_ro_ro', - ), - migrations.RenameField( - model_name='producttag', - old_name='name_ru_RU', - new_name='name_ru_ru', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_ar_AR', - new_name='description_ar_ar', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_cs_CZ', - new_name='description_cs_cz', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_da_DK', - new_name='description_da_dk', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_de_DE', - new_name='description_de_de', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_en_GB', - new_name='description_en_gb', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_en_US', - new_name='description_en_us', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_es_ES', - new_name='description_es_es', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_fr_FR', - new_name='description_fr_fr', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_hi_IN', - new_name='description_hi_in', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_it_IT', - new_name='description_it_it', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_ja_JP', - new_name='description_ja_jp', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_kk_KZ', - new_name='description_kk_kz', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_nl_NL', - new_name='description_nl_nl', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_pl_PL', - new_name='description_pl_pl', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_pt_BR', - new_name='description_pt_br', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_ro_RO', - new_name='description_ro_ro', - ), - migrations.RenameField( - model_name='promotion', - old_name='description_ru_RU', - new_name='description_ru_ru', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_ar_AR', - new_name='name_ar_ar', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_cs_CZ', - new_name='name_cs_cz', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_da_DK', - new_name='name_da_dk', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_de_DE', - new_name='name_de_de', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_en_GB', - new_name='name_en_gb', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_en_US', - new_name='name_en_us', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_es_ES', - new_name='name_es_es', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_fr_FR', - new_name='name_fr_fr', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_hi_IN', - new_name='name_hi_in', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_it_IT', - new_name='name_it_it', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_ja_JP', - new_name='name_ja_jp', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_kk_KZ', - new_name='name_kk_kz', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_nl_NL', - new_name='name_nl_nl', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_pl_PL', - new_name='name_pl_pl', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_pt_BR', - new_name='name_pt_br', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_ro_RO', - new_name='name_ro_ro', - ), - migrations.RenameField( - model_name='promotion', - old_name='name_ru_RU', - new_name='name_ru_ru', - ), - ] diff --git a/core/migrations/0023_address_address_line.py b/core/migrations/0023_address_address_line.py deleted file mode 100644 index 55654c18..00000000 --- a/core/migrations/0023_address_address_line.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2 on 2025-05-28 19:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0022_category_slug'), - ] - - operations = [ - migrations.AddField( - model_name='address', - name='address_line', - field=models.TextField(blank=True, help_text='address line for the customer', null=True, - verbose_name='address line'), - ), - ] diff --git a/core/migrations/0024_categorytag_category_tags.py b/core/migrations/0024_categorytag_category_tags.py deleted file mode 100644 index 9b140e9a..00000000 --- a/core/migrations/0024_categorytag_category_tags.py +++ /dev/null @@ -1,103 +0,0 @@ -# Generated by Django 5.2 on 2025-06-10 02:42 - -import uuid - -import django_extensions.db.fields -import django_prometheus.models -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0023_address_address_line'), - ] - - operations = [ - migrations.CreateModel( - name='CategoryTag', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, - help_text='unique id is used to surely identify any database object', - primary_key=True, serialize=False, verbose_name='unique id')), - ('is_active', models.BooleanField(default=True, - help_text="if set to false, this object can't be seen by users without needed permission", - verbose_name='is active')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, - help_text='when the object first appeared on the database', - verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, - help_text='when the object was last modified', - verbose_name='modified')), - ('tag_name', models.CharField(help_text='internal tag identifier for the product tag', max_length=255, - verbose_name='tag name')), - ('name', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, unique=True, - verbose_name='tag display name')), - ('name_en_gb', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_ar_ar', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_cs_cz', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_da_dk', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_de_de', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_en_us', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_es_es', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_fr_fr', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_hi_in', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_it_it', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_ja_jp', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_kk_kz', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_nl_nl', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_pl_pl', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_pt_br', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_ro_ro', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_ru_ru', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ('name_zh_hans', - models.CharField(help_text='user-friendly name for the product tag', max_length=255, null=True, - unique=True, verbose_name='tag display name')), - ], - options={ - 'verbose_name': 'category tag', - 'verbose_name_plural': 'category tags', - }, - bases=(django_prometheus.models.ExportModelOperationsMixin('category_tag'), models.Model), - ), - migrations.AddField( - model_name='category', - name='tags', - field=models.ManyToManyField(blank=True, help_text='tags that help describe or group this category', - to='core.categorytag', verbose_name='category tags'), - ), - ] diff --git a/core/migrations/0025_alter_product_category.py b/core/migrations/0025_alter_product_category.py deleted file mode 100644 index 4e6cc22d..00000000 --- a/core/migrations/0025_alter_product_category.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 5.2 on 2025-06-17 08:25 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('core', '0024_categorytag_category_tags'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='category', - field=models.ForeignKey(help_text='category this product belongs to', - on_delete=django.db.models.deletion.CASCADE, related_name='products', - to='core.category', verbose_name='category'), - ), - ] diff --git a/core/models.py b/core/models.py deleted file mode 100644 index 2dfb79dc..00000000 --- a/core/models.py +++ /dev/null @@ -1,1945 +0,0 @@ -import datetime -import json -import logging -from decimal import Decimal -from typing import Optional, Self - -from constance import config -from django.contrib.gis.db.models import PointField -from django.contrib.postgres.indexes import GinIndex -from django.core.cache import cache -from django.core.exceptions import BadRequest, ValidationError -from django.core.validators import MaxValueValidator, MinValueValidator -from django.db.models import ( - CASCADE, - PROTECT, - Avg, - BooleanField, - CharField, - DateTimeField, - DecimalField, - FileField, - FloatField, - ForeignKey, - ImageField, - IntegerField, - JSONField, - ManyToManyField, - Max, - OneToOneField, - PositiveIntegerField, - TextField, -) -from django.db.models.indexes import Index -from django.http import Http404 -from django.utils import timezone -from django.utils.encoding import force_bytes -from django.utils.http import urlsafe_base64_encode -from django.utils.translation import gettext_lazy as _ -from django_extensions.db.fields import AutoSlugField -from django_prometheus.models import ExportModelOperationsMixin -from mptt.fields import TreeForeignKey -from mptt.models import MPTTModel - -from core.abstract import NiceModel -from core.choices import ORDER_PRODUCT_STATUS_CHOICES, ORDER_STATUS_CHOICES -from core.errors import DisabledCommerceError, NotEnoughMoneyError -from core.managers import AddressManager -from core.utils import ( - generate_human_readable_id, - get_product_uuid_as_path, - get_random_code, -) -from core.utils.db import TweakedAutoSlugField, unicode_slugify_function -from core.utils.lists import FAILED_STATUSES -from core.validators import validate_category_image_dimensions -from evibes.settings import CURRENCY_CODE -from payments.models import Transaction - -logger = logging.getLogger("evibes") - - -class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): - """ - Represents a group of attributes, which can be hierarchical. - - This class is used to manage and organize attribute groups. An attribute - group can have a parent group, forming a hierarchical structure. This can - be useful for categorizing and managing attributes more effectively in a - complex system. - - Attributes: - parent (Self): A foreign key referencing the parent of this group. It - can be null or blank if the group does not have a parent. The parent - group organizes the hierarchical structure. - name (str): The unique name of the attribute group. It is limited to a - maximum of 255 characters. - is_publicly_visible (bool): Indicates if the attribute group is visible - publicly. - - Meta: - verbose_name: A human-readable name for the class, set to 'attribute - group'. - verbose_name_plural: A human-readable plural name for the class, set to - 'attribute groups'. - """ - - is_publicly_visible = True - - parent: Self = ForeignKey( # type: ignore - "self", - on_delete=CASCADE, - null=True, - blank=True, - related_name="children", - help_text=_("parent of this group"), - verbose_name=_("parent attribute group"), - ) - name: str = CharField( # type: ignore - max_length=255, - verbose_name=_("attribute group's name"), - help_text=_("attribute group's name"), - unique=True, - ) - - def __str__(self): - return self.name - - class Meta: - verbose_name = _("attribute group") - verbose_name_plural = _("attribute groups") - - -class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): - """ - Represents a vendor entity capable of storing information about external vendors and - their interaction requirements. - - The Vendor class is used to define and manage information related to an external vendor. - It stores the vendor's name, authentication details required for communication, - and the percentage markup applied to products retrieved from the vendor. This model also - maintains additional metadata and constraints, making it suitable for use in systems - that interact with third-party vendors. - - Attributes: - authentication (dict): Credentials and endpoint information required for vendor - communication, stored in a JSON field. - markup_percent (int): The markup percentage applied to products sent by this - vendor. Must be an integer between 0 and 100 inclusive. - name (str): The unique name of the vendor, with a maximum length of 255 - characters. - - Meta: - verbose_name (str): Singular name of the vendor entity ("vendor"). - verbose_name_plural (str): Plural name of the vendor entities ("vendors"). - indexes (list): List of database indexes applied to this model, including a - GIN index on the 'authentication' field. - - Returns: - str: The vendor's name when the instance is represented as a string. - """ - - is_publicly_visible = False - - authentication: dict = JSONField( # type: ignore - blank=True, - null=True, - help_text=_("stores credentials and endpoints required for vendor communication"), - verbose_name=_("authentication info"), - ) - markup_percent: int = IntegerField( # type: ignore - default=0, - validators=[MinValueValidator(0), MaxValueValidator(100)], - help_text=_("define the markup for products retrieved from this vendor"), - verbose_name=_("vendor markup percentage"), - ) - name: str = CharField( # type: ignore - max_length=255, - help_text=_("name of this vendor"), - verbose_name=_("vendor name"), - blank=False, - null=False, - unique=True, - ) - - def __str__(self) -> str: - return self.name - - class Meta: - verbose_name = _("vendor") - verbose_name_plural = _("vendors") - indexes = [ - GinIndex(fields=["authentication"]), - ] - - -class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): - """ - Represents a product tag used for classifying or identifying products. - - The ProductTag class is designed to uniquely identify and classify products - through a combination of an internal tag identifier and a user-friendly - display name. It supports operations exported through mixins and provides - metadata customization for administrative purposes. - - Attributes: - is_publicly_visible: A boolean indicating whether the tag is publicly - visible. - tag_name: Internal tag identifier for the product tag. - name: User-friendly name for the product tag. - - """ - - is_publicly_visible = True - - tag_name: str = CharField( # type: ignore - blank=False, - null=False, - max_length=255, - help_text=_("internal tag identifier for the product tag"), - verbose_name=_("tag name"), - ) - name: str = CharField( # type: ignore - max_length=255, - help_text=_("user-friendly name for the product tag"), - verbose_name=_("tag display name"), - unique=True, - ) - - def __str__(self): - return self.tag_name - - class Meta: - verbose_name = _("product tag") - verbose_name_plural = _("product tags") - - -class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): - """ - Represents a category tag used for products. - - This class models a category tag that can be used to associate and classify products. - It includes attributes for an internal tag identifier and a user-friendly display name. - - Attributes: - is_publicly_visible (bool): Indicates if the category tag is publicly visible. - tag_name (str): Internal tag identifier for the product tag. - name (str): User-friendly name for the product tag. - - """ - - is_publicly_visible = True - - tag_name: str = CharField( # type: ignore - blank=False, - null=False, - max_length=255, - help_text=_("internal tag identifier for the product tag"), - verbose_name=_("tag name"), - ) - name: str = CharField( # type: ignore - max_length=255, - help_text=_("user-friendly name for the product tag"), - verbose_name=_("tag display name"), - unique=True, - ) - - def __str__(self): - return self.tag_name - - class Meta: - verbose_name = _("category tag") - verbose_name_plural = _("category tags") - - -class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): - """ - Represents a category entity to organize and group related items in a hierarchical - structure. Categories may have hierarchical relationships with other categories, - supporting parent-child relationships. The class includes fields for metadata and - visual representation, which serve as a foundation for category-related features. - - This class is typically used to define and manage product categories or other similar - groupings within an application, allowing users or administrators to specify the - name, description, and hierarchy of categories, as well as assign attributes like - images, tags, or priority. - - Attributes - ---------- - is_publicly_visible : bool - A flag indicating whether the category is visible to the public. - - image : ImageField - Represents an optional image associated with the category. The image is used - to visually represent the category. - - markup_percent : int - Specifies the markup percentage for products in this category. It is validated - to ensure values fall between 0 and 100. - - parent : Self - Represents the parent category in a hierarchical structure. This forms category - relationships to enable nesting. - - name : str - The name of the category, which also must be unique. This serves as the primary - identifier for the category. - - description : str - An optional detailed description explaining the purpose or details of the category. - - slug : str - A unique, auto-generated field created from the category's name and parent name, - suitable for use in URLs and identifying the category. - - tags : CategoryTag - Optional tags used to group or describe the category better. - - priority : int - Represents the priority of the category, which could be used for sorting or - rendering purposes. - - Methods - ------- - __str__() - Returns the name of the category as its string representation. - - get_tree_depth() - Computes the depth of the category in the hierarchical structure. It determines - the maximum depth of its descendants or returns zero if the category is a leaf. - - Meta Options - ------------ - verbose_name : str - Specifies the singular human-readable name for the category model. - - verbose_name_plural : str - Specifies the plural human-readable name for the category model. - - ordering : list - Defines the default ordering for category instances, based on their hierarchical - structure. - """ - - is_publicly_visible = True - - image = ImageField( # type: ignore - blank=True, - null=True, - help_text=_("upload an image representing this category"), - upload_to="categories/", - validators=[validate_category_image_dimensions], - verbose_name=_("category image"), - ) - markup_percent: int = IntegerField( # type: ignore - default=0, - validators=[MinValueValidator(0), MaxValueValidator(100)], - help_text=_("define a markup percentage for products in this category"), - verbose_name=_("markup percentage"), - ) - parent: Self = TreeForeignKey( - "self", - on_delete=CASCADE, - blank=True, - null=True, - related_name="children", - help_text=_("parent of this category to form a hierarchical structure"), - verbose_name=_("parent category"), - ) - - name: str = CharField( # type: ignore - max_length=255, - verbose_name=_("category name"), - help_text=_("provide a name for this category"), - unique=True, - ) - - description: str = TextField( # type: ignore - blank=True, - null=True, - help_text=_("add a detailed description for this category"), - verbose_name=_("category description"), - ) - - slug: str = TweakedAutoSlugField( # type: ignore - populate_from=( - "parent__name", - "name", - ), - slugify_function=unicode_slugify_function, - allow_unicode=True, - unique=True, - editable=False, - max_length=88, - overwrite=True, - null=True, - verbose_name=_("Slug"), - ) - tags: CategoryTag = ManyToManyField( # type: ignore - "core.CategoryTag", - blank=True, - help_text=_("tags that help describe or group this category"), - verbose_name=_("category tags"), - ) - priority: int = PositiveIntegerField( # type: ignore - default=0, - null=False, - blank=False, - verbose_name=_("priority"), - ) - - def __str__(self): - return self.name - - def get_tree_depth(self): - if self.is_leaf_node(): - return 0 - return self.get_descendants().aggregate(max_depth=Max("level"))["max_depth"] - self.get_level() - - class Meta: - verbose_name = _("category") - verbose_name_plural = _("categories") - ordering = ["tree_id", "lft"] - - -class Brand(ExportModelOperationsMixin("brand"), NiceModel): - """ - Represents a Brand object in the system. - - This class handles information and attributes related to a brand, including its name, logos, - description, associated categories, a unique slug, and priority order. - It allows for the organization and representation of brand-related data within the application. - - Attributes: - is_publicly_visible (bool): Indicates if the brand is visible publicly. - name (str): The name of the brand. - small_logo (ImageField): An optional small logo image file representing the brand. - big_logo (ImageField): An optional large logo image file representing the brand. - description (str): An optional textual description providing details about the brand. - categories (Category): Optional categories associated with this brand. - slug (str): A unique auto-generated slug used for SEO-friendly URLs. - priority (int): Specifies the priority ranking of the brand. - - """ - - is_publicly_visible = True - - name: str = CharField( # type: ignore - max_length=255, - help_text=_("name of this brand"), - verbose_name=_("brand name"), - unique=True, - ) - small_logo = ImageField( # type: ignore - upload_to="brands/", - blank=True, - null=True, - help_text=_("upload a logo representing this brand"), - validators=[validate_category_image_dimensions], - verbose_name=_("brand small image"), - ) - big_logo = ImageField( # type: ignore - upload_to="brands/", - blank=True, - null=True, - help_text=_("upload a big logo representing this brand"), - validators=[validate_category_image_dimensions], - verbose_name=_("brand big image"), - ) - description: str = TextField( # type: ignore - blank=True, - null=True, - help_text=_("add a detailed description of the brand"), - verbose_name=_("brand description"), - ) - categories: Category = ManyToManyField( # type: ignore - "core.Category", - blank=True, - help_text=_("optional categories that this brand is associated with"), - verbose_name=_("associated categories"), - ) - slug: str = AutoSlugField( # type: ignore - populate_from=("name",), - allow_unicode=True, - unique=True, - editable=False, - max_length=88, - overwrite=True, - null=True, - slugify_function=unicode_slugify_function, - verbose_name=_("Slug"), - ) - priority: int = PositiveIntegerField( # type: ignore - default=0, - null=False, - blank=False, - verbose_name=_("priority"), - ) - - def __str__(self): - return self.name - - class Meta: - verbose_name = _("brand") - verbose_name_plural = _("brands") - - -class Product(ExportModelOperationsMixin("product"), NiceModel): - """ - Represents a product with attributes such as category, brand, tags, digital status, name, - description, part number, and slug. Provides related utility properties to retrieve - ratings, feedback counts, price, quantity, and total orders. Designed for use in a - system that handles e-commerce or inventory management. - - This class interacts with related models (such as Category, Brand, and ProductTag) and - manages caching for frequently accessed properties to improve performance. It is used - to define and manipulate product data and its associated information within - an application. - - Attributes: - is_publicly_visible (bool): Indicates whether the product is visible to the public. - category (Category): The category this product belongs to. - brand (Brand, optional): Optionally associates this product with a brand. - tags (ProductTag): Tags that help describe or group this product. - is_digital (bool): Indicates whether this product is digitally delivered. - name (str): The identifying name for the product. - description (str, optional): A detailed description of the product. - partnumber (str): The unique part number for this product. - slug (str, optional): Auto-generated unique slug for the product. - - Meta: - verbose_name (str): The singular name of the product model. - verbose_name_plural (str): The plural name of the product model. - - Properties: - rating (float): The average rating of the product, rounded to 2 decimal places. - feedbacks_count (int): The total number of feedback entries associated with the product. - price (float): The lowest price of the product based on its stock, rounded to 2 decimal - places. - quantity (int): The total available quantity of the product across all its stocks. - total_orders (int): Counts the total orders made for the product in relevant statuses. - """ - - is_publicly_visible = True - - category: Category = ForeignKey( # type: ignore - "core.Category", - on_delete=CASCADE, - help_text=_("category this product belongs to"), - verbose_name=_("category"), - related_name="products", - ) - brand: Brand = ForeignKey( # type: ignore - "core.Brand", - on_delete=CASCADE, - blank=True, - null=True, - help_text=_("optionally associate this product with a brand"), - verbose_name=_("brand"), - ) - tags: ProductTag = ManyToManyField( # type: ignore - "core.ProductTag", - blank=True, - help_text=_("tags that help describe or group this product"), - verbose_name=_("product tags"), - ) - is_digital: bool = BooleanField( # type: ignore - default=False, - help_text=_("indicates whether this product is digitally delivered"), - verbose_name=_("is product digital"), - blank=False, - null=False, - ) - name: str = CharField( # type: ignore - max_length=255, - help_text=_("provide a clear identifying name for the product"), - verbose_name=_("product name"), - ) - description: str = TextField( # type: ignore - blank=True, - null=True, - help_text=_("add a detailed description of the product"), - verbose_name=_("product description"), - ) - partnumber: str = CharField( # type: ignore - unique=True, - default=None, - blank=False, - null=True, - help_text=_("part number for this product"), - verbose_name=_("part number"), - ) - slug: str | None = AutoSlugField( # type: ignore - populate_from=( - "name", - "brand__slug", - "category__slug", - "uuid", - ), - max_length=88, - overwrite=True, - allow_unicode=True, - unique=True, - slugify_function=unicode_slugify_function, - editable=False, - null=True, - verbose_name=_("Slug"), - ) - - class Meta: - verbose_name = _("product") - verbose_name_plural = _("products") - - def __str__(self): - return self.name - - @property - def rating(self): - cache_key = f"product_rating_{self.pk}" - rating = cache.get(cache_key) - if rating is None: - feedbacks = Feedback.objects.filter(order_product__product_id=self.pk) - rating = feedbacks.aggregate(Avg("rating"))["rating__avg"] or 0 - cache.set(cache_key, rating, 604800) - return round(rating, 2) - - @rating.setter - def rating(self, value): - self.__dict__["rating"] = value - - @property - def feedbacks_count(self): - cache_key = f"product_feedbacks_count_{self.pk}" - feedbacks_count = cache.get(cache_key) - if feedbacks_count is None: - feedbacks_count = Feedback.objects.filter(order_product__product_id=self.pk).count() - cache.set(cache_key, feedbacks_count, 604800) - return feedbacks_count - - @property - def price(self) -> float: - stock = self.stocks.order_by("price").only("price").first() - price = stock.price if stock else 0.0 - return round(price, 2) - - @property - def quantity(self) -> int: - cache_key = f"product_quantity_{self.pk}" - quantity = cache.get(cache_key, 0) - if not quantity: - stocks = self.stocks.only("quantity") - for stock in stocks: - quantity += stock.quantity - cache.set(cache_key, quantity, 3600) - return quantity - - @property - def total_orders(self): - return OrderProduct.objects.filter( - product__uuid=self.uuid, - status__in=["FINISHED", "DELIVERING", "CREATED", "PAYMENT"], - ).count() - - -class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): - """ - Represents an attribute in the system. - - This class is used to define and manage attributes, which are customizable - pieces of data that can be associated with other entities. Attributes - have associated categories, groups, value types, and names. The model - supports multiple types of values, including string, integer, float, - boolean, array, and object. This allows for dynamic and flexible data - structuring. - - Attributes: - is_publicly_visible (bool): Denotes whether the attribute is publicly - visible. Defaults to True. - - categories (ManyToManyField): Categories to which this attribute - belongs. It is a many-to-many relationship with `Category` model. - - group (ForeignKey): The group to which this attribute belongs. It is - a ForeignKey relation to the `AttributeGroup` model. - - value_type (CharField): The type of the attribute's value. Options - include string, integer, float, boolean, array, or object. - - name (CharField): The unique name of the attribute. - """ - - is_publicly_visible = True - - categories: Category = ManyToManyField( # type: ignore - "core.Category", - related_name="attributes", - help_text=_("category of this attribute"), - verbose_name=_("categories"), - ) - - group: AttributeGroup = ForeignKey( # type: ignore - "core.AttributeGroup", - on_delete=CASCADE, - related_name="attributes", - help_text=_("group of this attribute"), - verbose_name=_("attribute group"), - ) - value_type: str = CharField( # type: ignore - max_length=50, - choices=[ - ("string", _("string")), - ("integer", _("integer")), - ("float", _("float")), - ("boolean", _("boolean")), - ("array", _("array")), - ("object", _("object")), - ], - help_text=_("type of the attribute's value"), - verbose_name=_("value type"), - ) - - name: str = CharField( # type: ignore - max_length=255, - help_text=_("name of this attribute"), - verbose_name=_("attribute's name"), - unique=True, - ) - - def __str__(self): - return self.name - - class Meta: - verbose_name = _("attribute") - verbose_name_plural = _("attributes") - - -class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): - """ - Represents a specific value for an attribute that is linked to a product. - - This class serves the purpose of mapping a value to an attribute for a - specific product. It links the 'attribute' to a unique 'value', allowing - better organization and dynamic representation of product characteristics. - It also defines whether the attribute value is public through the - 'is_publicly_visible' attribute. - - Attributes - ---------- - is_publicly_visible : bool - Determines if the attribute value is visible publicly. Defaults to True. - attribute : core.Attribute - The 'Attribute' object this value is linked to. Foreign key relationship - with 'core.Attribute'. - product : core.Product - The specific 'Product' this attribute's value is associated with. - Foreign key relationship with 'core.Product'. - value : str - Holds the specific value for this attribute as a text field. - """ - - is_publicly_visible = True - - attribute: Attribute = ForeignKey( # type: ignore - "core.Attribute", - on_delete=CASCADE, - related_name="values", - help_text=_("attribute of this value"), - verbose_name=_("attribute"), - ) - product: Product = ForeignKey( # type: ignore - "core.Product", - on_delete=CASCADE, - blank=False, - null=True, - help_text=_("the specific product associated with this attribute's value"), - verbose_name=_("associated product"), - related_name="attributes", - ) - value: str = TextField( # type: ignore - verbose_name=_("attribute value"), - help_text=_("the specific value for this attribute"), - ) - - def __str__(self): - return f"{self.attribute!s}: {self.value}" - - class Meta: - verbose_name = _("attribute value") - verbose_name_plural = _("attribute values") - - -class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): - """ - Represents a product image associated with a product in the system. - - This class is designed to manage images for products, including functionality - for uploading image files, associating them with specific products, and - determining their display order. It also includes an accessibility feature - with alternative text for the images. - - Attributes: - is_publicly_visible (bool): A flag indicating whether the image is - visible publicly. - alt (str): Alternative text for the image to support accessibility. - image (ImageField): The image file associated with the product. - priority (int): The display priority of the image. Images with lower - priority values are displayed first. - product (ForeignKey): The product to which this image is associated. - """ - - is_publicly_visible = True - - alt: str = CharField( # type: ignore - max_length=255, - help_text=_("provide alternative text for the image for accessibility"), - verbose_name=_("image alt text"), - ) - image = ImageField( - help_text=_("upload the image file for this product"), - verbose_name=_("product image"), - upload_to=get_product_uuid_as_path, - ) - priority: int = IntegerField( # type: ignore - default=1, - validators=[MinValueValidator(1)], - help_text=_("determines the order in which images are displayed"), - verbose_name=_("display priority"), - ) - product: ForeignKey = ForeignKey( - "core.Product", - on_delete=CASCADE, - help_text=_("the product that this image represents"), - verbose_name=_("associated product"), - related_name="images", - ) - - def get_product_uuid_as_path(self, *args): - return str(self.product.uuid) + "/" + args[0] - - def __str__(self) -> str: - return self.alt - - class Meta: - ordering = ("priority",) - verbose_name = _("product image") - verbose_name_plural = _("product images") - - -class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): - """ - Represents a promotional campaign for products with a discount. - - This class is used to define and manage promotional campaigns that offer a - percentage-based discount for products. The class includes attributes for - setting the discount rate, providing details about the promotion, and linking - it to the applicable products. It integrates with the product catalog to - determine the affected items in the campaign. - - Attributes: - is_publicly_visible: A class-level attribute indicating whether the promotion - is publicly visible. - discount_percent: IntegerField. Specifies the percentage discount for the - selected products. Must be between 1 and 100 inclusive. - name: CharField. A unique name for the promotion, required for promoting - distinguishable campaigns. Maximum length is 256 characters. - description: TextField, optional. Provides a detailed description of the - promotion. Can be left blank or null. - products: ManyToManyField. Links the promotion to the products that are included - in its scope. Can be left blank. - - Meta: - verbose_name: The singular name for the promotion in database and UI contexts. - verbose_name_plural: The pluralized name for multiple promotions in database and - UI contexts. - - Methods: - __str__(): - Returns a string representation of the promotion. If the name is - provided, it returns the name; otherwise, it returns the ID of the - promotion as a string. - """ - - is_publicly_visible = True - - discount_percent: int = IntegerField( # type: ignore - validators=[MinValueValidator(1), MaxValueValidator(100)], - help_text=_("percentage discount for the selected products"), - verbose_name=_("discount percentage"), - ) - name: str = CharField( # type: ignore - max_length=256, - unique=True, - help_text=_("provide a unique name for this promotion"), - verbose_name=_("promotion name"), - ) - description: str = TextField( # type: ignore - blank=True, - null=True, - help_text=_("add a detailed description of the product"), - verbose_name=_("promotion description"), - ) - products: ManyToManyField = ManyToManyField( # type: ignore - "core.Product", - blank=True, - help_text=_("select which products are included in this promotion"), - verbose_name=_("included products"), - ) - - class Meta: - verbose_name = _("promotion") - verbose_name_plural = _("promotions") - - def __str__(self) -> str: - if self.name: - return self.name - return str(self.id) - - -class Stock(ExportModelOperationsMixin("stock"), NiceModel): - """ - Represents the stock of a product managed in the system. - - This class provides details about the relationship between vendors, products, - and their stock information, as well as inventory-related properties like price, - purchase price, quantity, SKU, and digital assets. It is part of the inventory - management system to allow tracking and evaluation of products available from - various vendors. - - Attributes: - is_publicly_visible (bool): Indicates if the stock is publicly visible. Defaults to False. - vendor (ForeignKey): The vendor supplying this product stock. - price (float): The final price to the customer after markups. - product (ForeignKey): The product associated with this stock entry. - purchase_price (float): The price paid to the vendor for this product. - quantity (int): Available quantity of the product in stock. - sku (str): Vendor-assigned SKU for identifying the product. - digital_asset (FileField): Digital file associated with this stock if applicable. - """ - - is_publicly_visible = False - - vendor: ForeignKey = ForeignKey( - "core.Vendor", - on_delete=CASCADE, - help_text=_("the vendor supplying this product stock"), - verbose_name=_("associated vendor"), - ) - price: float = FloatField( # type: ignore - default=0.0, - help_text=_("final price to the customer after markups"), - verbose_name=_("selling price"), - ) - product: ForeignKey = ForeignKey( # type: ignore - "core.Product", - on_delete=CASCADE, - help_text=_("the product associated with this stock entry"), - verbose_name=_("associated product"), - related_name="stocks", - blank=True, - null=True, - ) - purchase_price: float = FloatField( # type: ignore - default=0.0, - help_text=_("the price paid to the vendor for this product"), - verbose_name=_("vendor purchase price"), - ) - quantity: int = IntegerField( # type: ignore - default=0, - help_text=_("available quantity of the product in stock"), - verbose_name=_("quantity in stock"), - ) - sku: str = CharField( # type: ignore - max_length=255, - help_text=_("vendor-assigned SKU for identifying the product"), - verbose_name=_("vendor sku"), - ) - digital_asset = FileField( - default=None, - blank=True, - null=True, - help_text=_("digital file associated with this stock if applicable"), - verbose_name=_("digital file"), - upload_to="downloadables/", - ) - - def __str__(self) -> str: - return f"{self.vendor.name} - {self.product!s}" # type: ignore - - class Meta: - verbose_name = _("stock") - verbose_name_plural = _("stock entries") - - -class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): - """ - Represents a user's wishlist for storing and managing desired products. - - The Wishlist class provides functionality to manage a collection of products - that a user wishes to save. It supports operations such as adding products, - removing products, adding multiple products in bulk, and removing multiple - products in bulk. The wishlist is associated with a specific user and is - stored with optional public visibility status. - """ - - is_publicly_visible = False - - products: ManyToManyField = ManyToManyField( # type: ignore - "core.Product", - blank=True, - help_text=_("products that the user has marked as wanted"), - verbose_name=_("wishlisted products"), - ) - user: OneToOneField = OneToOneField( # type: ignore - "vibes_auth.User", - on_delete=CASCADE, - blank=True, - null=True, - help_text=_("user who owns this wishlist"), - verbose_name=_("wishlist owner"), - related_name="user_related_wishlist", - ) - - def __str__(self): - return f"{self.user.email}'s wishlist" - - class Meta: - verbose_name = _("wishlist") - verbose_name_plural = _("wishlists") - - def add_product(self, product_uuid): - try: - product = Product.objects.get(uuid=product_uuid) - if product in self.products.all(): - return self - self.products.add(product) - except Product.DoesNotExist: - name = "Product" - raise Http404(_(f"{name} does not exist: {product_uuid}")) - - return self - - def remove_product(self, product_uuid): - try: - product = Product.objects.get(uuid=product_uuid) - if product not in self.products.all(): - return self - self.products.remove(product) - except Product.DoesNotExist: - name = "Product" - raise Http404(_(f"{name} does not exist: {product_uuid}")) - - return self - - def bulk_add_products(self, product_uuids): - self.products.add(*Product.objects.filter(uuid__in=product_uuids)) - - return self - - def bulk_remove_products(self, product_uuids): - self.products.remove(*Product.objects.filter(uuid__in=product_uuids)) - - return self - - -class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): - """ - Model representing a documentary record tied to a product. - - This class is used to store information about documentaries related to specific - products, including file uploads and their metadata. It contains methods and - properties to handle the file type and storage path for the documentary files. - It extends functionality from specific mixins and provides additional custom - features. - - Attributes: - is_publicly_visible: A boolean indicating if the documentary is - publicly visible. - product: ForeignKey linking the documentary to a product. - document: FileField used to store the file associated with the documentary. - - Meta: - verbose_name: Singular name for the documentary model. - verbose_name_plural: Plural name for the documentary model. - """ - - is_publicly_visible = True - - product: ForeignKey = ForeignKey(to=Product, on_delete=CASCADE, related_name="documentaries") - document = FileField(upload_to=get_product_uuid_as_path) - - class Meta: - verbose_name = _("documentary") - verbose_name_plural = _("documentaries") - - def __str__(self): - return f"{self.product.name} - {self.document.name}" - - def get_product_uuid_as_path(self, *args): - return str(self.product.uuid) + "/" + args[0] - - @property - def file_type(self): - return self.document.name.split(".")[-1] or _("unresolved") - - -class Address(ExportModelOperationsMixin("address"), NiceModel): - """ - Represents an address entity that includes location details and associations with - a user. Provides functionality for geographic and address data storage, as well - as integration with geocoding services. - - This class is designed to store detailed address information including components - like street, city, region, country, and geolocation (longitude and latitude). - - It supports integration with geocoding APIs, enabling the storage of raw API - responses for further processing or inspection. The class also allows associating - an address with a user, facilitating personalized data handling. - - Attributes: - is_publicly_visible (bool): Indicates whether the address is visible publicly. - address_line (str): A general address line containing information about the - customer's location. Optional. - street (str): The street name or number in the address. Optional. - district (str): The district related to the address. Optional. - city (str): The name of the city where the address is located. Optional. - region (str): The name of the region associated with the address. Optional. - postal_code (str): The postal code corresponding to the address. Optional. - country (str): The country where the address resides. Optional. - location (PointField): A geolocation represented as (longitude, latitude). - Allows geospatial searches. Optional. - raw_data (dict): The full JSON response directly from the geocoding service, - containing detailed information about the address. Optional. - api_response (dict): Stores a processed version or subset of the JSON - response from the geocoding service. Optional. - user (ForeignKey): Reference to a User entity who owns this address. Optional. - - Meta: - verbose_name (str): Human-readable singular name for the address. - verbose_name_plural (str): Human-readable plural name for addresses. - indexes (list): Database indexes defined for improving query performance - on specific fields like 'location'. - """ - - is_publicly_visible = False - - address_line: str = TextField( # type: ignore - blank=True, - null=True, - help_text=_("address line for the customer"), - verbose_name=_("address line"), - ) - street: str = CharField(_("street"), max_length=255, null=True) # type: ignore - district: str = CharField(_("district"), max_length=255, null=True) # type: ignore - city: str = CharField(_("city"), max_length=100, null=True) # type: ignore - region: str = CharField(_("region"), max_length=100, null=True) # type: ignore - postal_code: str = CharField(_("postal code"), max_length=20, null=True) # type: ignore - country: str = CharField(_("country"), max_length=40, null=True) # type: ignore - - location: PointField = PointField( # type: ignore - geography=True, - srid=4326, - null=True, - blank=True, - help_text=_("geolocation point: (longitude, latitude)"), - ) - - raw_data: dict = JSONField(blank=True, null=True, help_text=_("full JSON response from geocoder for this address")) # type: ignore - - api_response: dict = JSONField( # type: ignore - blank=True, - null=True, - help_text=_("stored JSON response from the geocoding service"), - ) - - user: ForeignKey = ForeignKey(to="vibes_auth.User", on_delete=CASCADE, blank=True, null=True) # type: ignore - - objects = AddressManager() - - class Meta: - verbose_name = _("address") - verbose_name_plural = _("addresses") - indexes = [ - Index(fields=["location"]), - ] - - def __str__(self): - base = f"{self.street}, {self.city}, {self.country}" - return f"{base} for {self.user.email}" if self.user else base - - -class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): - """ - Represents a promotional code that can be used for discounts, managing its validity, - type of discount, and application. - - The PromoCode class stores details about a promotional code, including its unique - identifier, discount properties (amount or percentage), validity period, associated - user (if any), and status of its usage. It includes functionality to validate and - apply the promo code to an order while ensuring constraints are met. - - Attributes: - code (str): The unique identifier for the promo code. - discount_amount (Decimal): The fixed discount amount applied, if defined. - discount_percent (int): The percentage discount applied, if defined. - end_time (datetime): The expiration timestamp of the promo code. - start_time (datetime): The timestamp from when the promo code is valid. - used_on (datetime): The timestamp when the promo code was used (if applicable). - user (ForeignKey): The user associated with the promo code, if any. - - Methods: - save(**kwargs): Ensures only one type of discount (amount or percent) is defined. - __str__(): Returns the promo code identifier as its string representation. - use(order): Applies the promo code to the given order and calculates final price. - - Meta: - verbose_name: Display name for the promo code model. - verbose_name_plural: Plural display name for the promo code model. - """ - - is_publicly_visible = False - - code: str = CharField( # type: ignore - max_length=20, - unique=True, - default=get_random_code, - help_text=_("unique code used by a user to redeem a discount"), - verbose_name=_("promo code identifier"), - ) - discount_amount: Decimal = DecimalField( # type: ignore - max_digits=10, - decimal_places=2, - blank=True, - null=True, - help_text=_("fixed discount amount applied if percent is not used"), - verbose_name=_("fixed discount amount"), - ) - discount_percent: int = IntegerField( # type: ignore - validators=[MinValueValidator(1), MaxValueValidator(100)], - blank=True, - null=True, - help_text=_("percentage discount applied if fixed amount is not used"), - verbose_name=_("percentage discount"), - ) - end_time: datetime = DateTimeField( # type: ignore - blank=True, - null=True, - help_text=_("timestamp when the promocode expires"), - verbose_name=_("end validity time"), - ) - start_time: datetime = DateTimeField( # type: ignore - blank=True, - null=True, - help_text=_("timestamp from which this promocode is valid"), - verbose_name=_("start validity time"), - ) - used_on: datetime = DateTimeField( # type: ignore - blank=True, - null=True, - help_text=_("timestamp when the promocode was used, blank if not used yet"), - verbose_name=_("usage timestamp"), - ) - user: ForeignKey = ForeignKey( # type: ignore - "vibes_auth.User", - on_delete=CASCADE, - help_text=_("user assigned to this promocode if applicable"), - verbose_name=_("assigned user"), - null=True, - blank=True, - related_name="promocodes", - ) - - class Meta: - verbose_name = _("promo code") - verbose_name_plural = _("promo codes") - - def save(self, **kwargs): - if (self.discount_amount is not None and self.discount_percent is not None) or ( - self.discount_amount is None and self.discount_percent is None - ): - raise ValidationError( - _("only one type of discount should be defined (amount or percent), but not both or neither.") - ) - super().save(**kwargs) - - def __str__(self) -> str: - return self.code - - @property - def discount_type(self): - if self.discount_amount is not None: - return "amount" - return "percent" - - def use(self, order: "Order") -> float: - if self.used_on: - raise ValueError(_("promocode already used")) - - amount = order.total_price - - if self.discount_type == "percent": - amount -= round(amount * (self.discount_percent / 100), 2) - order.attributes.update({"promocode": str(self.uuid), "final_price": amount}) - order.save() - elif self.discount_type == "amount": - amount -= round(float(self.discount_amount), 2) - order.attributes.update({"promocode": str(self.uuid), "final_price": amount}) - order.save() - else: - raise ValueError(_(f"invalid discount type for promocode {self.uuid}")) - - self.used_on = datetime.datetime.now() - self.save() - return amount - - -class Order(ExportModelOperationsMixin("order"), NiceModel): - """ - Represents an order placed by a user. - - This class models an order within the application, including its various attributes such as billing - and shipping information, status, associated user, notifications, and related operations. - Orders can have associated products, promotions can be applied, addresses set, and shipping or billing - details updated. Equally, functionality supports managing the products in the order lifecycle. - - Attributes: - billing_address (Address): The billing address used for the order. - promo_code (PromoCode): An optional promo code applied to the order. - shipping_address (Address): The shipping address used for the order. - status (str): The current status of the order (e.g., PENDING, COMPLETED). - notifications (dict): JSON structure dictating notifications for the user. - attributes (dict): JSON representation of additional order-specific attributes. - user (User): The user who placed the order. - buy_time (datetime): Timestamp when the order was finalized. - human_readable_id (str): A unique human-readable identifier for the order. - """ - - is_publicly_visible = False - - billing_address: Address = ForeignKey( # type: ignore - "core.Address", - on_delete=CASCADE, - blank=True, - null=True, - related_name="billing_address_order", - help_text=_("the billing address used for this order"), - verbose_name=_("billing address"), - ) - promo_code: PromoCode = ForeignKey( # type: ignore - "core.PromoCode", - on_delete=PROTECT, - blank=True, - null=True, - help_text=_("optional promo code applied to this order"), - verbose_name=_("applied promo code"), - ) - shipping_address: Address = ForeignKey( # type: ignore - "core.Address", - on_delete=CASCADE, - blank=True, - null=True, - related_name="shipping_address_order", - help_text=_("the shipping address used for this order"), - verbose_name=_("shipping address"), - ) - status: str = CharField( # type: ignore - default="PENDING", - max_length=64, - choices=ORDER_STATUS_CHOICES, - help_text=_("current status of the order in its lifecycle"), - verbose_name=_("order status"), - ) - notifications: dict = JSONField( # type: ignore - blank=True, - null=True, - help_text=_("json structure of notifications to display to users"), - verbose_name=_("notifications"), - ) - attributes: dict = JSONField( # type: ignore - blank=True, - null=True, - help_text=_("json representation of order attributes for this order"), - verbose_name=_("attributes"), - ) - user = ForeignKey( # type: ignore - "vibes_auth.User", - on_delete=CASCADE, - help_text=_("the user who placed the order"), - verbose_name=_("user"), - related_name="orders", - blank=True, - null=True, - ) - buy_time: datetime = DateTimeField( # type: ignore - help_text=_("the timestamp when the order was finalized"), - verbose_name=_("buy time"), - default=None, - null=True, - blank=True, - ) - human_readable_id: str = CharField( # type: ignore - max_length=8, - help_text=_("a human-readable identifier for the order"), - verbose_name=_("human readable id"), - unique=True, - default=generate_human_readable_id, - ) - - class Meta: - verbose_name = _("order") - verbose_name_plural = _("orders") - - def __str__(self) -> str: - return f"#{self.pk} for {self.user.email if self.user else 'unregistered user'}" # type: ignore - - @property - def is_business(self) -> bool: - return self.attributes.get("is_business", False) if self.attributes else False - - def save(self, **kwargs): - pending_orders = 0 - if self.user: - pending_orders = self.user.orders.filter(status="PENDING").count() - if self.status == "PENDING" and pending_orders > 1: - raise ValueError(_("a user must have only one pending order at a time")) - return super().save(**kwargs) - - @property - def total_price(self) -> float: - return ( - round( - sum( - ( - order_product.buy_price * order_product.quantity - if order_product.status not in FAILED_STATUSES and order_product.buy_price is not None - else 0.0 - ) - for order_product in self.order_products.all() - ), - 2, - ) - or 0.0 - ) - - @property - def total_quantity(self) -> int: - return sum([op.quantity for op in self.order_products.all()]) - - def add_product( - self, - product_uuid: str | None = None, - attributes: list | None = None, - update_quantity: bool = True, - ): - if attributes is None: - attributes = [] - - if self.status not in ["PENDING", "MOMENTAL"]: - raise ValueError(_("you cannot add products to an order that is not a pending one")) - try: - product = Product.objects.get(uuid=product_uuid) - - if not product.is_active: - raise BadRequest(_("you cannot add inactive products to order")) - - buy_price = product.price - - promotions = Promotion.objects.filter(is_active=True, products__in=[product]).order_by("discount_percent") - - if promotions.exists(): - buy_price -= round(product.price * (promotions.first().discount_percent / 100), 2) # type: ignore - - order_product, is_created = OrderProduct.objects.get_or_create( - product=product, - order=self, - attributes=json.dumps(attributes), - defaults={"quantity": 1, "buy_price": product.price}, - ) - if not is_created and update_quantity: - if product.quantity < order_product.quantity + 1: - raise BadRequest(_("you cannot add more products than available in stock")) - order_product.quantity += 1 - order_product.buy_price = product.price - order_product.save() - - return self - - except Product.DoesNotExist: - name = "Product" - raise Http404(_(f"{name} does not exist: {product_uuid}")) - - def remove_product( - self, - product_uuid: str | None = None, - attributes: dict | None = None, - zero_quantity: bool = False, - ): - if attributes is None: - attributes = {} - - if self.status not in ["PENDING", "MOMENTAL"]: - raise ValueError(_("you cannot remove products from an order that is not a pending one")) - try: - product = Product.objects.get(uuid=product_uuid) - order_product = self.order_products.get(product=product, order=self) - if zero_quantity: - order_product.delete() - return self - if order_product.quantity == 1: - self.order_products.remove(order_product) - order_product.delete() - else: - order_product.quantity -= 1 - order_product.save() - return self - except Product.DoesNotExist: - name = "Product" - raise Http404(_(f"{name} does not exist: {product_uuid}")) - except OrderProduct.DoesNotExist: - name = "OrderProduct" - query = f"product: {product_uuid}, order: {self.uuid}, attributes: {attributes}" - raise Http404(_(f"{name} does not exist with query <{query}>")) - - def remove_all_products(self): - if self.status not in ["PENDING", "MOMENTAL"]: - raise ValueError(_("you cannot remove products from an order that is not a pending one")) - for order_product in self.order_products.all(): - self.order_products.remove(order_product) - order_product.delete() - return self - - def remove_products_of_a_kind(self, product_uuid: str): - if self.status not in ["PENDING", "MOMENTAL"]: - raise ValueError(_("you cannot remove products from an order that is not a pending one")) - try: - product = Product.objects.get(uuid=product_uuid) - order_product = self.order_products.get(product=product, order=self) - self.order_products.remove(order_product) - order_product.delete() - except Product.DoesNotExist: - name = "Product" - raise Http404(_(f"{name} does not exist: {product_uuid}")) - return self - - @property - def is_whole_digital(self): - return self.order_products.count() == self.order_products.filter(product__is_digital=True).count() - - def apply_promocode(self, promocode_uuid: str): - try: - promocode: PromoCode = PromoCode.objects.get(uuid=promocode_uuid) - except PromoCode.DoesNotExist: - raise Http404(_("promocode does not exist")) - return promocode.use(self) - - def apply_addresses(self, billing_address_uuid, shipping_address_uuid): - try: - if not any([shipping_address_uuid, billing_address_uuid]): - if self.is_whole_digital: - return - else: - raise ValueError(_("you can only buy physical products with shipping address specified")) - - if billing_address_uuid and not shipping_address_uuid: - shipping_address = Address.objects.get(uuid=billing_address_uuid) - billing_address = shipping_address - - elif shipping_address_uuid and not billing_address_uuid: - billing_address = Address.objects.get(uuid=shipping_address_uuid) - shipping_address = billing_address - - else: - billing_address = Address.objects.get(uuid=billing_address_uuid) - shipping_address = Address.objects.get(uuid=shipping_address_uuid) - - self.billing_address = billing_address - self.shipping_address = shipping_address - self.save() - - except Address.DoesNotExist: - raise Http404(_("address does not exist")) - - def buy( - self, - force_balance: bool = False, - force_payment: bool = False, - promocode_uuid: str | None = None, - billing_address: str | None = None, - shipping_address: str | None = None, - ) -> Self | Transaction | None: - if config.DISABLED_COMMERCE: - raise DisabledCommerceError(_("you can not buy at this moment, please try again in a few minutes")) - - if (not force_balance and not force_payment) or (force_balance and force_payment): - raise ValueError(_("invalid force value")) - - self.apply_addresses(billing_address, shipping_address) - - if self.total_quantity < 1: - raise ValueError(_("you cannot purchase an empty order!")) - - force = None - - if force_balance: - force = "balance" - - if force_payment: - force = "payment" - - amount = self.apply_promocode(promocode_uuid) if promocode_uuid else self.total_price - - match force: - case "balance": - if self.user.payments_balance.amount < amount: # type: ignore - raise NotEnoughMoneyError(_("insufficient funds to complete the order")) - self.status = "CREATED" - self.buy_time = timezone.now() - self.order_products.all().update(status="DELIVERING") - self.save() - return self - case "payment": - self.status = "PAYMENT" - self.save() - return Transaction.objects.create( - balance=self.user.payments_balance, # type: ignore - amount=amount, - currency=CURRENCY_CODE, - order=self, - ) - - return self - - def buy_without_registration(self, products: list, promocode_uuid: str, **kwargs) -> Transaction | None: - if config.DISABLED_COMMERCE: - raise DisabledCommerceError(_("you can not buy at this moment, please try again in a few minutes")) - - if len(products) < 1: - raise ValueError(_("you cannot purchase an empty order!")) - - customer_name = kwargs.get("customer_name") - customer_email = kwargs.get("customer_email") - customer_phone_number = kwargs.get("customer_phone_number") - - if not all([customer_name, customer_email, customer_phone_number]): - raise ValueError( - _( - "you cannot buy without registration, please provide the following information:" - " customer name, customer email, customer phone number" - ) - ) - - payment_method = kwargs.get("payment_method") - available_payment_methods = cache.get("payment_methods").get("payment_methods") - - if payment_method not in available_payment_methods: - raise ValueError(_(f"invalid payment method: {payment_method} from {available_payment_methods}")) - - billing_customer_address_uuid = kwargs.get("billing_customer_address") - shipping_customer_address_uuid = kwargs.get("shipping_customer_address") - - self.apply_addresses(billing_customer_address_uuid, shipping_customer_address_uuid) - - for product_uuid in products: - self.add_product(product_uuid) - - amount = self.apply_promocode(promocode_uuid) if promocode_uuid else self.total_price - - self.status = "CREATED" - - if self.attributes is None: - self.attributes = {} - - self.attributes.update( - { - "customer_name": customer_name, - "customer_email": customer_email, - "customer_phone_number": customer_phone_number, - "is_business": kwargs.get("is_business", False), - } - ) - - self.save() - - return Transaction.objects.create( - amount=amount, - currency=CURRENCY_CODE, - order=self, - payment_method=kwargs.get("payment_method"), - ) - - def finalize(self): - if ( - self.order_products.filter( - status__in=[ - "ACCEPTED", - "FAILED", - "RETURNED", - "CANCELED", - "FINISHED", - ] - ).count() - == self.order_products.count() - ): - self.status = "FINISHED" - self.save() - - def bulk_add_products(self, products: list): - for product in products: - self.add_product( - product.get("uuid"), - attributes=product.get("attributes"), - update_quantity=False, - ) - return self - - def bulk_remove_products(self, products: list): - for product in products: - self.remove_product( - product.get("uuid"), - attributes=product.get("attributes"), - zero_quantity=True, - ) - return self - - -class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): - """ - Represents a product associated with an order. - - The OrderProduct model maintains information about a product that is part of an order, - including details such as purchase price, quantity, product attributes, and status. It - manages notifications for the user and administrators and handles operations such as - returning the product balance or adding feedback. This model also provides methods and - properties that support business logic, such as calculating the total price or generating - a download URL for digital products. The model integrates with the Order and Product models - and stores a reference to them. - - Attributes: - is_publicly_visible (bool): Indicates whether this model is visible publicly. - buy_price (float): The price paid by the customer for this product at purchase time. - comments (str): Internal comments entered by admins regarding this ordered product. - notifications (dict): JSON structure containing notifications relevant to the product. - attributes (dict): JSON representation of the product's attributes as part of the order. - order (Order): Reference to the parent order that contains this product. - product (Product): Reference to the specific product associated with the order line. - quantity (int): Represents the quantity of this product ordered. - status (str): The current status of the product in the order. - """ - - is_publicly_visible = False - - buy_price: float = FloatField( # type: ignore - blank=True, - null=True, - help_text=_("the price paid by the customer for this product at purchase time"), - verbose_name=_("purchase price at order time"), - ) - comments: str = TextField( # type: ignore - blank=True, - null=True, - help_text=_("internal comments for admins about this ordered product"), - verbose_name=_("internal comments"), - ) - notifications: dict = JSONField( # type: ignore - blank=True, - null=True, - help_text=_("json structure of notifications to display to users"), - verbose_name=_("user notifications"), - ) - attributes: dict = JSONField( # type: ignore - blank=True, - null=True, - help_text=_("json representation of this item's attributes"), - verbose_name=_("ordered product attributes"), - ) - order: Order = ForeignKey( # type: ignore - "core.Order", - on_delete=CASCADE, - help_text=_("reference to the parent order that contains this product"), - verbose_name=_("parent order"), - related_name="order_products", - null=True, - ) - product: Product = ForeignKey( # type: ignore - "core.Product", - on_delete=PROTECT, - blank=True, - null=True, - help_text=_("the specific product associated with this order line"), - verbose_name=_("associated product"), - ) - quantity: int = PositiveIntegerField( # type: ignore - blank=False, - null=False, - default=1, - help_text=_("quantity of this specific product in the order"), - verbose_name=_("product quantity"), - ) - status: str = CharField( # type: ignore - max_length=128, - blank=False, - null=False, - choices=ORDER_PRODUCT_STATUS_CHOICES, - help_text=_("current status of this product in the order"), - verbose_name=_("product line status"), - default="PENDING", - ) - - def __str__(self) -> str: - return f"{self.product.name} for ({self.order.user.email if self.order.user else 'unregistered user'})" # type: ignore - - class Meta: - verbose_name = _("order product") - verbose_name_plural = _("order products") - indexes = [ - GinIndex(fields=["notifications", "attributes"]), - ] - - def return_balance_back(self): - self.status = "RETURNED" - self.save() - self.order.user.payments_balance.amount += self.buy_price - self.order.user.payments_balance.save() - - def add_error(self, error=None): - if self.notifications is not None: - order_product_errors = self.notifications.get("errors", []) - if not order_product_errors: - self.notifications.update( - { - "errors": [ - { - "detail": ( - error if error else f"Something went wrong with {self.uuid} for some reason..." - ) - }, - ] - } - ) - else: - order_product_errors.append({"detail": error}) - self.notifications.update({"errors": order_product_errors}) - else: - self.notifications = {"errors": [{"detail": error}]} - self.status = "FAILED" - self.save() - return self - - @property - def total_price(self) -> float: - return round(self.buy_price * self.quantity, 2) - - @property - def download_url(self) -> str: - if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore - return self.download.url - return "" - - def do_feedback(self, rating: int = 10, comment: str = "", action: str = "add") -> Optional["Feedback"]: - if action not in ["add", "remove"]: - raise ValueError(_(f"wrong action specified for feedback: {action}")) - if action == "remove" and self.feedback: - self.feedback.delete() - return None - if action == "add" and not self.feedback: - if self.order.status not in ["MOMENTAL", "PENDING"]: # type: ignore - return Feedback.objects.create(rating=rating, comment=comment, order_product=self) - else: - raise ValueError(_("you cannot feedback an order which is not received")) - return None - - -class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): - """ - Represents the downloading functionality for digital assets associated - with orders. - - The DigitalAssetDownload class provides the ability to manage and access - downloads related to order products. It maintains information about the - associated order product, the number of downloads, and whether the asset - is publicly visible. It includes a method to generate a URL for downloading - the asset when the associated order is in a completed status. - - Attributes: - is_publicly_visible (bool): Indicates whether the digital asset is - publicly visible. Always set to False for this class. - order_product (OneToOneField): Reference to the associated order product. - It has a one-to-one relationship with the OrderProduct model, and - deleting the OrderProduct will delete the associated download. - num_downloads (int): Indicates the number of times the digital asset - has been downloaded. - - Methods: - url: Property to generate the download URL for the digital asset - if the associated order is in a finished status. - """ - - is_publicly_visible = False - - order_product: OneToOneField = OneToOneField(to=OrderProduct, on_delete=CASCADE, related_name="download") # type: ignore - num_downloads: int = IntegerField(default=0) # type: ignore - - class Meta: - verbose_name = _("download") - verbose_name_plural = _("downloads") - - def __str__(self): - return f"{self.order_product} - {self.num_downloads}" - - @property - def url(self): - if self.order_product.status != "FINISHED": - raise ValueError(_("you can not download a digital asset for a non-finished order")) - - return ( - f"https://api.{config.BASE_DOMAIN}/download/{urlsafe_base64_encode(force_bytes(self.order_product.uuid))}" - ) - - -class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): - """ - Manages user feedback for products. - - This class is designed to capture and store user feedback for specific products - that they have purchased. It contains attributes to store user comments, - a reference to the related product in the order, and a user-assigned rating. The - class utilizes database fields to effectively model and manage feedback data. - - Attributes: - is_publicly_visible (bool): Indicates whether the feedback is visible to the public. - comment (str): User-provided comments about their experience with the product. - order_product (OrderProduct): Reference to the specific product in an order that this - feedback is about. - rating (float): User-assigned rating for the product, validated to be within the range - of 0 to 10. - """ - - is_publicly_visible = True - - comment: str = TextField( # type: ignore - blank=True, - null=True, - help_text=_("user-provided comments about their experience with the product"), - verbose_name=_("feedback comments"), - ) - order_product: OrderProduct = OneToOneField( # type: ignore - "core.OrderProduct", - on_delete=CASCADE, - blank=False, - null=False, - help_text=_("references the specific product in an order that this feedback is about"), - verbose_name=_("related order product"), - ) - rating: float = FloatField( # type: ignore - blank=True, - null=True, - help_text=_("user-assigned rating for the product"), - verbose_name=_("product rating"), - validators=[MinValueValidator(0), MaxValueValidator(10)], - ) - - def __str__(self) -> str: - return f"{self.rating} by {self.order_product.order.user.email}" - - class Meta: - verbose_name = _("feedback") - verbose_name_plural = _("feedbacks") diff --git a/core/signals.py b/core/signals.py deleted file mode 100644 index 0ad7e519..00000000 --- a/core/signals.py +++ /dev/null @@ -1,131 +0,0 @@ -import logging -from datetime import timedelta - -from django.db import IntegrityError -from django.db.models.signals import post_save -from django.dispatch import receiver -from django.utils.crypto import get_random_string -from django.utils.http import urlsafe_base64_decode -from django.utils.timezone import now -from django.utils.translation import gettext_lazy as _ -from sentry_sdk import capture_exception - -from core.models import Category, Order, Product, PromoCode, Wishlist -from core.utils import ( - generate_human_readable_id, - resolve_translations_for_elasticsearch, -) -from core.utils.emailing import send_order_created_email, send_order_finished_email -from evibes.utils.misc import create_object -from vibes_auth.models import User - -logger = logging.getLogger("evibes") - - -@receiver(post_save, sender=User) -def create_order_on_user_creation_signal(instance, created, **_kwargs): - if created: - try: - Order.objects.create(user=instance, status="PENDING") - except IntegrityError: - human_readable_id = generate_human_readable_id() - while True: - if Order.objects.filter(human_readable_id=human_readable_id).exists(): - human_readable_id = generate_human_readable_id() - continue - Order.objects.create(user=instance, status="PENDING", human_readable_id=human_readable_id) - break - - -@receiver(post_save, sender=User) -def create_wishlist_on_user_creation_signal(instance, created, **_kwargs): - if created: - Wishlist.objects.create(user=instance) - - -@receiver(post_save, sender=User) -def create_promocode_on_user_referring(instance, created, **_kwargs): - try: - if created and instance.attributes.get("referrer", ""): - referrer_uuid = urlsafe_base64_decode(instance.attributes.get("referrer", "")) - referrer = User.objects.get(uuid=referrer_uuid) - code = f"WELCOME-{get_random_string(6)}" - PromoCode.objects.create( - user=referrer, - code=code if len(code) <= 20 else code[:20], - discount_percent=10, - start_time=now(), - end_time=now() + timedelta(days=30), - ) - except Exception as e: - capture_exception(e) - logger.error(_(f"error during promocode creation: {e!s}")) - - -@receiver(post_save, sender=Order) -def process_order_changes(instance, created, **_kwargs): - if not created: - if instance.status != "PENDING" and instance.user: - pending_orders = Order.objects.filter(user=instance.user, status="PENDING") - - if not pending_orders.exists(): - try: - Order.objects.create(user=instance.user, status="PENDING") - except IntegrityError: - human_readable_id = generate_human_readable_id() - while True: - if Order.objects.filter(human_readable_id=human_readable_id).exists(): - human_readable_id = generate_human_readable_id() - continue - Order.objects.create( - user=instance, - status="PENDING", - human_readable_id=human_readable_id, - ) - break - - if instance.status in ["CREATED", "PAYMENT"]: - if not instance.is_whole_digital: - send_order_created_email.delay(instance.uuid) - - for order_product in instance.order_products.filter(status="DELIVERING"): - if not order_product.product.is_digital: - continue - - try: - vendor_name = ( - order_product.product.stocks.filter(price=order_product.buy_price).first().vendor.name.lower() - ) - - vendor = create_object(f"core.vendors.{vendor_name}", f"{vendor_name.title()}Vendor") - - vendor.buy_order_product(order_product) - - except Exception as e: - order_product.add_error(f"Failed to buy {order_product.uuid}. Reason: {e}...") - - else: - instance.finalize() - - if instance.order_products.filter(status="FAILED").count() == instance.order_products.count(): - instance.status = "FAILED" - instance.save() - - if instance.status == "FINISHED": - send_order_finished_email.delay(instance.uuid) - - -@receiver(post_save, sender=Product) -def update_product_name_lang(instance, created, **_kwargs): - if created: - pass - resolve_translations_for_elasticsearch(instance, "name") - resolve_translations_for_elasticsearch(instance, "description") - - -@receiver(post_save, sender=Category) -def update_category_name_lang(instance, created, **_kwargs): - if created: - pass - resolve_translations_for_elasticsearch(instance, "name") - resolve_translations_for_elasticsearch(instance, "description") diff --git a/core/sitemaps.py b/core/sitemaps.py deleted file mode 100644 index 0f9a629a..00000000 --- a/core/sitemaps.py +++ /dev/null @@ -1,63 +0,0 @@ -from django.contrib.sitemaps import Sitemap -from django.utils.text import slugify - -from core.models import Brand, Category, Product -from evibes.settings import LANGUAGE_CODE - - -class ProductSitemap(Sitemap): - protocol = "https" - changefreq = "daily" - priority = 0.9 - limit = 40000 - - def items(self): - return ( - Product.objects.filter( - is_active=True, - brand__is_active=True, - category__is_active=True, - ) - .only("uuid", "name", "modified", "slug") - .order_by("-modified") - ) - - def lastmod(self, obj): - return obj.modified - - def location(self, obj): - return f"/{LANGUAGE_CODE}/product/{obj.slug}" - - -class CategorySitemap(Sitemap): - protocol = "https" - changefreq = "weekly" - priority = 0.7 - limit = 40000 - - def items(self): - return Category.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified") - - def lastmod(self, obj): - return obj.modified - - def location(self, obj): - slug = slugify(obj.name) - return f"/{LANGUAGE_CODE}/catalog/{obj.uuid}/{slug}" - - -class BrandSitemap(Sitemap): - protocol = "https" - changefreq = "weekly" - priority = 0.6 - limit = 40000 - - def items(self): - return Brand.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified") - - def lastmod(self, obj): - return obj.modified - - def location(self, obj): - slug = slugify(obj.name) - return f"/{LANGUAGE_CODE}/brand/{obj.uuid}/{slug}" diff --git a/core/static/robots_frontend.txt b/core/static/robots_frontend.txt deleted file mode 100644 index 49febff4..00000000 --- a/core/static/robots_frontend.txt +++ /dev/null @@ -1,11 +0,0 @@ -User-agent: * -Disallow: /admin/ -Disallow: /static/ -Disallow: /media/ -Disallow: /cart/ -Disallow: /account/ - -Allow: / - -Sitemap: https://evibes.com/sitemap.xml -Host: evibes.com \ No newline at end of file diff --git a/core/tests.py b/core/tests.py deleted file mode 100644 index e55d6890..00000000 --- a/core/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase # noqa: F401 - -# Create your tests here. diff --git a/core/urls.py b/core/urls.py deleted file mode 100644 index e8ac27db..00000000 --- a/core/urls.py +++ /dev/null @@ -1 +0,0 @@ -urlpatterns: list = [] diff --git a/core/utils/__init__.py b/core/utils/__init__.py deleted file mode 100644 index f8190b3f..00000000 --- a/core/utils/__init__.py +++ /dev/null @@ -1,149 +0,0 @@ -import logging -import re -import secrets -from contextlib import contextmanager - -from constance import config -from django.core.cache import cache -from django.db import transaction -from django.utils.crypto import get_random_string - -from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE - -logger = logging.getLogger("evibes") - - -def get_random_code() -> str: - """ - Generates a random string of a specified length. This method calls the - get_random_string function to create a random alphanumeric string of - 20 characters in length. - - Returns - ------- - str - A 20-character-long alphanumeric string. - """ - return get_random_string(20) - - -def get_product_uuid_as_path(instance, filename): - """ - Generates a unique file path for a product using its UUID. - - This function constructs a file path that includes the product UUID - in its directory structure. The path format is "products/{product_uuid}/{filename}", - where `product_uuid` is derived from the instance's product attribute, and - `filename` corresponds to the original name of the file being processed. - - Parameters: - instance: Object - The model instance containing the product attribute with the desired UUID. - filename: str - The original name of the file for which the path is being generated. - - Returns: - str - A string representing the generated unique file path that adheres to the - format "products/{product_uuid}/{filename}". - """ - return "products" + "/" + str(instance.product.uuid) + "/" + filename - - -def get_brand_name_as_path(instance, filename): - return "brands/" + str(instance.name) + "/" + filename - - -@contextmanager -def atomic_if_not_debug(): - """ - A context manager to execute a database operation within an atomic transaction - when the `DEBUG` setting is disabled. If `DEBUG` is enabled, it bypasses - transactional behavior. This allows safe rollback in production and easier - debugging in development. - - Yields - ------ - None - Yields control to the enclosed block of code. - """ - if not DEBUG: - with transaction.atomic(): - yield - else: - yield - - -def is_url_safe(url: str) -> bool: - """ - Determine if a given URL is safe. This function evaluates whether - the provided URL starts with "https://", making it a potentially - secure resource by evaluating its prefix using a regular expression. - - Arguments: - url (str): The URL to evaluate. - - Returns: - bool: True if the URL starts with "https://", indicating it may - be considered safe. False otherwise. - """ - return bool(re.match(r"^https://", url, re.IGNORECASE)) - - -def format_attributes(attributes: str | None = None): - if not attributes: - return {} - - try: - attribute_pairs = attributes.split(",") - except AttributeError: - return {} - - result = {} - for attr_pair in attribute_pairs: - try: - key, value = attr_pair.split("=") - result[key] = value - except ValueError: - continue - - return result - - -def get_project_parameters(): - parameters = cache.get("parameters", {}) - - if not parameters: - for key in EXPOSABLE_KEYS: - parameters[key.lower()] = getattr(config, key) - - cache.set("parameters", parameters, 60 * 60) - - return parameters - - -def resolve_translations_for_elasticsearch(instance, field_name): - field = getattr(instance, f"{field_name}_{LANGUAGE_CODE}", "") - filled_field = getattr(instance, field_name, "") - if not field: - setattr(instance, f"{field_name}_{LANGUAGE_CODE}", filled_field) - - -CROCKFORD = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789" - - -def generate_human_readable_id(length: int = 6) -> str: - """ - Generate a human-readable ID of `length` characters (from the Crockford set), - with a single hyphen inserted: - - 50% chance at the exact middle - - 50% chance at a random position between characters (1 to length-1) - - The final string length will be `length + 1` (including the hyphen). - """ - chars = [secrets.choice(CROCKFORD) for _ in range(length)] - - pos = (secrets.randbelow(length - 1) + 1) if secrets.choice([True, False]) else (length // 2) - - chars.insert(pos, "-") - return "".join(chars) diff --git a/core/utils/constance.py b/core/utils/constance.py deleted file mode 100644 index c1b6771e..00000000 --- a/core/utils/constance.py +++ /dev/null @@ -1,12 +0,0 @@ -from constance import config - -from evibes import settings - - -def set_email_settings(): - settings.EMAIL_HOST = config.EMAIL_HOST - settings.EMAIL_PORT = config.EMAIL_PORT - settings.EMAIL_HOST_USER = config.EMAIL_HOST_USER - settings.EMAIL_HOST_PASSWORD = config.EMAIL_HOST_PASSWORD - settings.EMAIL_USE_TLS = config.EMAIL_USE_TLS - settings.EMAIL_USE_SSL = config.EMAIL_USE_SSL diff --git a/core/utils/emailing.py b/core/utils/emailing.py deleted file mode 100644 index a1ec3c9e..00000000 --- a/core/utils/emailing.py +++ /dev/null @@ -1,152 +0,0 @@ -from datetime import datetime - -from celery.app import shared_task -from constance import config -from django.core import mail -from django.core.mail import EmailMessage -from django.template.loader import render_to_string -from django.utils.translation import activate -from django.utils.translation import gettext_lazy as _ - -from core.models import Order, OrderProduct -from core.utils.constance import set_email_settings - - -@shared_task -def contact_us_email(contact_info): - set_email_settings() - connection = mail.get_connection() - - email = EmailMessage( - _(f"{config.PROJECT_NAME} | contact us initiated"), - render_to_string( - "contact_us_email.html", - { - "email": contact_info.get("email"), - "name": contact_info.get("name"), - "subject": contact_info.get("subject", "Without subject"), - "phone_number": contact_info.get("phone_number", "Without phone number"), - "message": contact_info.get("message"), - "config": config, - }, - ), - to=[config.EMAIL_FROM], - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, - ) - email.content_subtype = "html" - email.send() - - return True, str(contact_info.get("email")) - - -@shared_task -def send_order_created_email(order_pk: str) -> tuple[bool, str]: - try: - order = Order.objects.get(pk=order_pk) - except Order.DoesNotExist: - return False, f"Order not found with the given pk: {order_pk}" - - activate(order.user.language) # type: ignore - - set_email_settings() - connection = mail.get_connection() - - if not order.is_whole_digital: - email = EmailMessage( - _(f"{config.PROJECT_NAME} | order confirmation"), - render_to_string( - "digital_order_created_email.html" if order.is_whole_digital else "shipped_order_created_email.html", - { - "order": order, - "today": datetime.today(), - "config": config, - "total_price": order.total_price, - }, - ), - to=[order.user.email], # type: ignore - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, - ) - email.content_subtype = "html" - email.send() - - return True, str(order.uuid) - - -@shared_task -def send_order_finished_email(order_pk: str) -> tuple[bool, str]: - def send_digital_assets_email(ops: list[OrderProduct]): - if len(ops) <= 0: - return - - activate(order.user.language) # type: ignore - - set_email_settings() - connection = mail.get_connection() - - email = EmailMessage( - _(f"{config.PROJECT_NAME} | order delivered"), - render_to_string( - template_name="digital_order_delivered_email.html", - context={ - "order_uuid": order.human_readable_id, - "user_first_name": order.user.first_name, # type: ignore - "order_products": ops, - "project_name": config.PROJECT_NAME, - "contact_email": config.EMAIL_FROM, - "total_price": round(sum(op.buy_price for op in ops), 2), - "display_system_attributes": order.user.has_perm("core.view_order"), # type: ignore - "today": datetime.today(), - }, - ), - to=[order.user.email], # type: ignore - from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, - ) - email.content_subtype = "html" - email.send() - - def send_thank_you_email(ops: list[OrderProduct]): - if ops: - pass - activate(order.user.language) # type: ignore - - set_email_settings() - - pass - - try: - order = Order.objects.get(pk=order_pk) - except Order.DoesNotExist: - return False, f"Order not found with the given pk: {order_pk}" - - digital_ops = [] - - for digital_op in order.order_products.filter( - product__is_digital=True, - status__in=[ - "FINISHED", - "DELIVERED", - "ACCEPTED", - ], - ): - digital_ops.append(digital_op) - - send_digital_assets_email(digital_ops) - - shipped_ops = [] - - for shipped_op in order.order_products.filter( - product__is_digital=False, - status__in=[ - "FINISHED", - "DELIVERED", - "ACCEPTED", - ], - ): - shipped_ops.append(shipped_op) - - send_thank_you_email(shipped_ops) - - return True, str(order.uuid) diff --git a/core/utils/languages.py b/core/utils/languages.py deleted file mode 100644 index 8ab2d840..00000000 --- a/core/utils/languages.py +++ /dev/null @@ -1,5 +0,0 @@ -from constance import config - - -def get_flag_by_language(language): - return f"https://api.{config.BASE_DOMAIN}/static/flags/{language}.png" diff --git a/core/validators.py b/core/validators.py deleted file mode 100644 index 59ccd7e6..00000000 --- a/core/validators.py +++ /dev/null @@ -1,22 +0,0 @@ -import re - -from django.core.exceptions import ValidationError -from django.core.files.images import get_image_dimensions -from django.utils.translation import gettext_lazy as _ - - -def validate_category_image_dimensions(image): - max_width = 99999 - max_height = 99999 - - if image: - width, height = get_image_dimensions(image.file) - - if width > max_width or height > max_height: - raise ValidationError(_(f"image dimensions should not exceed w{max_width} x h{max_height} pixels")) - - -def validate_phone_number(value, **_kwargs): - phone_regex = re.compile(r"^\+?1?\d{9,15}$") - if not phone_regex.match(value): - raise ValidationError(_("invalid phone number format")) diff --git a/core/views.py b/core/views.py deleted file mode 100644 index 54f53ec6..00000000 --- a/core/views.py +++ /dev/null @@ -1,543 +0,0 @@ -import mimetypes -import os - -import requests -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.http import FileResponse, Http404, JsonResponse -from django.shortcuts import redirect -from django.utils.encoding import force_str -from django.utils.http import urlsafe_base64_decode -from django.utils.translation import gettext_lazy as _ -from django_ratelimit.decorators import ratelimit -from djangorestframework_camel_case.render import CamelCaseJSONRenderer -from djangorestframework_camel_case.util import camelize -from drf_spectacular.utils import extend_schema_view -from drf_spectacular.views import SpectacularRedocView, SpectacularSwaggerView -from graphene_file_upload.django import FileUploadGraphQLView -from rest_framework import status -from rest_framework.permissions import AllowAny -from rest_framework.renderers import MultiPartRenderer -from rest_framework.response import Response -from rest_framework.views import APIView -from rest_framework_xml.renderers import XMLRenderer -from rest_framework_yaml.renderers import YAMLRenderer -from sentry_sdk import capture_exception - -from core.docs.drf.views import ( - BUY_AS_BUSINESS_SCHEMA, - CACHE_SCHEMA, - CONTACT_US_SCHEMA, - LANGUAGE_SCHEMA, - PARAMETERS_SCHEMA, - REQUEST_CURSED_URL_SCHEMA, - SEARCH_SCHEMA, -) -from core.elasticsearch import process_query -from core.models import DigitalAssetDownload, Order -from core.serializers import ( - BuyAsBusinessOrderSerializer, - CacheOperatorSerializer, - ContactUsSerializer, - LanguageSerializer, -) -from core.utils import get_project_parameters, is_url_safe -from core.utils.caching import web_cache -from core.utils.emailing import contact_us_email -from core.utils.languages import get_flag_by_language -from evibes import settings -from evibes.settings import LANGUAGES -from payments.serializers import TransactionProcessSerializer - - -def sitemap_index(request, *args, **kwargs): - """ - Handles the request for the sitemap index and returns an XML response. It ensures the response includes - the appropriate content type header for XML. - - Args: - request: The HTTP request object. - *args: Additional positional arguments passed to the view. - **kwargs: Additional keyword arguments passed to the view. - - Returns: - A response object containing the sitemap index in XML format, with the proper content type set as - "application/xml; charset=utf-8". - """ - response = _sitemap_index_view(request, *args, **kwargs) - response["Content-Type"] = "application/xml; charset=utf-8" - return response - - -def sitemap_detail(request, *args, **kwargs): - """ - Handles the detailed view response for a sitemap. This function processes - the request, fetches the appropriate sitemap detail response, and sets the - Content-Type header for XML responses. - - Args: - request: An HTTP request object containing request metadata, such as - headers and HTTP method. - *args: Additional positional arguments provided dynamically to the - underlying sitemap detail view function. - **kwargs: Additional keyword arguments provided dynamically to the - underlying sitemap detail view function. - - Returns: - HttpResponse: A response object with content representing the requested - sitemap details. The Content-Type header is explicitly set to - "application/xml; charset=utf-8". - """ - response = _sitemap_detail_view(request, *args, **kwargs) - response["Content-Type"] = "application/xml; charset=utf-8" - return response - - -class CustomGraphQLView(FileUploadGraphQLView): - """ - A custom GraphQL view class that extends the functionality of FileUploadGraphQLView. - - This class serves as a customization extension of FileUploadGraphQLView that allows modification - or enhancement of specific behaviors, particularly the context handling for GraphQL requests. - - Attributes - ---------- - None - """ - - def get_context(self, request): - return request - - -class CustomSwaggerView(SpectacularSwaggerView): - """ - CustomSwaggerView is a subclass of SpectacularSwaggerView. - - This class overrides the `get_context_data` method to - add extra context to the response. It modifies the context by - including the absolute URI of the current request as the `script_url`. - This can be useful in scenarios where the script or reference - URL needs to be dynamically generated and included in the context. - """ - - def get_context_data(self, **kwargs): - # noinspection PyUnresolvedReferences - context = super().get_context_data(**kwargs) - context["script_url"] = self.request.build_absolute_uri() - return context - - -class CustomRedocView(SpectacularRedocView): - """ - CustomRedocView provides a customized version of the SpectacularRedocView. - - This class extends the SpectacularRedocView to include additional - functionality, such as dynamically setting the `script_url` in the - context data. It is designed to be used where customized behavior - for rendering ReDoc UI is required, specifically adapting the script - URL for the current request environment. - """ - - def get_context_data(self, **kwargs): - # noinspection PyUnresolvedReferences - context = super().get_context_data(**kwargs) - context["script_url"] = self.request.build_absolute_uri() - return context - - -@extend_schema_view(**LANGUAGE_SCHEMA) -class SupportedLanguagesView(APIView): - """ - Handles retrieving the list of supported languages. - - This class provides an endpoint to return available languages information. - It is configured with relevant serializers, permission classes, and renderers - for flexibility in response formats and access permissions. The endpoint - supports retrieving the list of languages with their respective codes, names, - and flags. - - Attributes: - serializer_class (Serializer): Serializer used for formatting the response data. - permission_classes (list): Permissions applied to restrict the endpoint access. - renderer_classes (list): Renderers available for formatting response output. - - Methods: - get(self, request): Retrieves the list of supported languages. - - """ - - serializer_class = LanguageSerializer - permission_classes = [ - AllowAny, - ] - renderer_classes = [ - CamelCaseJSONRenderer, - MultiPartRenderer, - XMLRenderer, - YAMLRenderer, - ] - - def get(self, request): - return Response( - data=self.serializer_class( - [ - { - "code": lang[0], - "name": lang[1], - "flag": get_flag_by_language(lang[0]), - } - for lang in LANGUAGES - ], - many=True, - ).data, - status=status.HTTP_200_OK, - ) - - -@extend_schema_view(**PARAMETERS_SCHEMA) -class WebsiteParametersView(APIView): - """ - Handles operations related to website parameters. - - This class is a Django Rest Framework view that allows clients to retrieve - the parameters of a website. It uses different renderers to present the data - in various formats. The view is publicly accessible. - - Attributes - ---------- - serializer_class - A placeholder for a DRF serializer, it is set to None since no serializer - is explicitly used in this view. - permission_classes - A list indicating the permissions required to access this view. In this case, - `AllowAny`, meaning the view is open to everyone. - renderer_classes - A list of renderers available for this view, supporting CamelCase JSON, - multipart forms, XML, and YAML formats. - - Methods - ------- - get(request) - Handles HTTP GET requests to fetch website parameters. - """ - - serializer_class = None - permission_classes = [ - AllowAny, - ] - renderer_classes = [ - CamelCaseJSONRenderer, - MultiPartRenderer, - XMLRenderer, - YAMLRenderer, - ] - - def get(self, request): - return Response(data=camelize(get_project_parameters()), status=status.HTTP_200_OK) - - -@extend_schema_view(**CACHE_SCHEMA) -class CacheOperatorView(APIView): - """ - View for managing cache operations. - - This class provides an API view for handling cache operations such as setting cache - data with a specified key and timeout. It leverages multiple renderer classes for - serializing outputs in various formats. - - Attributes: - serializer_class (type): Serializer to validate and deserialize input data. - permission_classes (list): List of permission classes to apply access - restrictions. - renderer_classes (list): List of renderer classes to serialize the output - in desired formats. - - Methods: - post(request, *args, **kwargs): Handles HTTP POST requests to set cache - data based on the provided key and timeout. - """ - - serializer_class = CacheOperatorSerializer - permission_classes = [ - AllowAny, - ] - renderer_classes = [ - CamelCaseJSONRenderer, - MultiPartRenderer, - XMLRenderer, - YAMLRenderer, - ] - - def post(self, request, *args, **kwargs): - return Response( - data=web_cache( - request, - request.data.get("key"), - request.data.get("data"), - request.data.get("timeout"), - ), - status=status.HTTP_200_OK, - ) - - -@extend_schema_view(**CONTACT_US_SCHEMA) -class ContactUsView(APIView): - """ - Handles contact us form submissions via a REST API. - - This view processes user submissions for a "Contact Us" form. It validates the received - data using a serializer, applies rate limiting for IP-based requests, and sends emails - asynchronously. The view is prepared to handle multiple response formats using configured - renderers. - - Attributes: - serializer_class: The serializer class used to validate incoming data. - renderer_classes: A list of renderers to support multiple response formats. - - Methods: - post: Handles POST requests to process form submissions. - - """ - - serializer_class = ContactUsSerializer - renderer_classes = [ - CamelCaseJSONRenderer, - MultiPartRenderer, - XMLRenderer, - YAMLRenderer, - ] - - @ratelimit(key="ip", rate="2/h") - def post(self, request, *args, **kwargs): - serializer = self.serializer_class(data=request.data) - serializer.is_valid(raise_exception=True) - contact_us_email.delay(serializer.validated_data) - - return Response(data=serializer.data, status=status.HTTP_200_OK) - - -@extend_schema_view(**REQUEST_CURSED_URL_SCHEMA) -class RequestCursedURLView(APIView): - """ - Handles requests for processing and validating URLs from incoming POST requests. - - Particularly intended for validating and processing URLs provided by clients. It uses rate-limiting, caching, and - various response format renderers to optimize performance and ensure safe handling of external data. - - Attributes: - permission_classes (list): Specifies the permissions required to access this view. - renderer_classes (list): Configures the response format renderers available for this view. - - Methods: - post: Handles the POST request to validate the URL, fetch its data if valid, and returns the processed response. - """ - - permission_classes = [ - AllowAny, - ] - renderer_classes = [ - CamelCaseJSONRenderer, - MultiPartRenderer, - XMLRenderer, - YAMLRenderer, - ] - - @ratelimit(key="ip", rate="10/h") - def post(self, request, *args, **kwargs): - url = request.data.get("url") - if not is_url_safe(url): - return Response( - data={"error": _("only URLs starting with http(s):// are allowed")}, - status=status.HTTP_400_BAD_REQUEST, - ) - try: - data = cache.get(url, None) - if not data: - response = requests.get(url, headers={"content-type": "application/json"}) - response.raise_for_status() - data = camelize(response.json()) - cache.set(url, data, 86400) - return Response( - data=data, - status=status.HTTP_200_OK, - ) - except Exception as e: - return Response( - data={"error": str(e)}, - status=status.HTTP_400_BAD_REQUEST, - ) - - -@extend_schema_view(**SEARCH_SCHEMA) -class GlobalSearchView(APIView): - """ - Class-based view for handling global search functionality. - - This class is designed to process search queries from HTTP GET requests. It is - capable of rendering results in multiple formats including CamelCase JSON, - MultiPart, XML, and YAML. The class uses a custom schema for API documentation - and processes search queries passed as parameters in the request. - - Attributes: - renderer_classes (list): List of renderer classes used to serialize responses - into various formats such as CamelCase JSON, MultiPart, XML, and YAML. - - Methods: - get: Handles HTTP GET requests by processing the search query and returning - formatted search results. - - """ - - renderer_classes = [ - CamelCaseJSONRenderer, - MultiPartRenderer, - XMLRenderer, - YAMLRenderer, - ] - - def get(self, request, *args, **kwargs): - return Response(camelize({"results": process_query(query=request.GET.get("q", "").strip(), request=request)})) - - -@extend_schema_view(**BUY_AS_BUSINESS_SCHEMA) -class BuyAsBusinessView(APIView): - """ - View for buying as a business. - - This view handles the logic of creating orders and processing transactions when a - business makes a purchase. It ensures that the request data is properly validated - and processed, handles the creation of the order, and starts the transaction process. - The view also restricts the rate of requests based on the client's IP address - to prevent abuse. - - Attributes: - schema (class): Extended schema for API documentation. - - Methods: - post(request, *_args, **kwargs): - Handles the post request to process a business purchase. - """ - - @ratelimit(key="ip", rate="2/h", block=True) - def post(self, request, *_args, **kwargs): - serializer = BuyAsBusinessOrderSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - order = Order.objects.create(status="MOMENTAL") - products = [product.get("product_uuid") for product in serializer.validated_data.get("products")] - transaction = order.buy_without_registration( - products=products, - promocode_uuid=serializer.validated_data.get("promocode_uuid"), - customer_name=serializer.validated_data.get("customer_name"), - customer_email=serializer.validated_data.get("customer_email"), - customer_phone=serializer.validated_data.get("customer_phone"), - customer_billing_address=serializer.validated_data.get("customer_billing_address_uuid"), - customer_shipping_address=serializer.validated_data.get("customer_shipping_address_uuid"), - payment_method=serializer.validated_data.get("payment_method"), - is_business=True, - ) - return Response( - status=status.HTTP_202_ACCEPTED, - data=TransactionProcessSerializer(transaction).data, - ) - - -def download_digital_asset_view(request, *args, **kwargs): - """ - Handles the downloading of a digital asset associated with an order. Ensures that users - are permitted to download the asset only once. Validates the request, retrieves the file, - and serves it as a downloadable response. Returns appropriate error responses for different - failure scenarios. - - Args: - request: The HTTP request object containing information about the client request. - *args: Additional positional arguments. - **kwargs: Additional keyword arguments. - - Raises: - BadRequest: If the digital asset has already been downloaded. - DigitalAssetDownload.DoesNotExist: If the requested digital asset cannot be found. - - Returns: - A FileResponse containing the digital asset file if the request is valid. Returns - a JsonResponse with an error message if an error occurs during the process. - """ - try: - uuid = force_str(urlsafe_base64_decode(kwargs["encoded_uuid"])) - download = DigitalAssetDownload.objects.get(order_product__uuid=uuid) - - if download.num_downloads >= 1: - raise BadRequest(_("you can only download the digital asset once")) - - download.num_downloads += 1 - download.save() - - file_path = download.order_product.product.stocks.first().digital_asset.file.path - - content_type, encoding = mimetypes.guess_type(file_path) - if not content_type: - content_type = "application/octet-stream" - - with open(file_path, "rb") as file: - response = FileResponse(file, content_type=content_type) - filename = os.path.basename(file_path) - response["Content-Disposition"] = f'attachment; filename="{filename}"' - return response - - except BadRequest as e: - return JsonResponse({"error": str(e)}, status=400) - - except DigitalAssetDownload.DoesNotExist: - return JsonResponse({"error": "Digital asset not found"}, status=404) - - except Exception as e: - capture_exception(e) - return JsonResponse( - {"error": "An error occurred while trying to download the digital asset"}, - status=500, - ) - - -def favicon_view(request, *args, **kwargs): - """ - Handles requests for the favicon of a website. This function attempts to serve the favicon - file located in the static directory of the project. If the favicon file is not found, - an HTTP 404 error is raised to indicate the resource is unavailable. - - Args: - request: The HTTP request object. - *args: Additional positional arguments that are ignored in this function. - **kwargs: Additional keyword arguments that are ignored in this function. - - Returns: - FileResponse: A file response containing the favicon image with the content-type - "image/x-icon". - - Raises: - Http404: Raised if the favicon file is not found. - """ - try: - favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png") - return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon") - except FileNotFoundError: - raise Http404(_("favicon not found")) - - -def index(request, *args, **kwargs): - """ - Redirects the request to the admin index page. - - The function handles incoming HTTP requests and redirects them to the Django - admin interface index page. It uses Django's `redirect` function for handling - the HTTP redirection. - - Args: - request: The HttpRequest object representing the incoming request. - *args: Additional positional arguments, if any. - **kwargs: Additional keyword arguments, if any. - - Returns: - HttpResponseRedirect: An HTTP response that redirects to the admin index. - """ - return redirect("admin:index") diff --git a/core/viewsets.py b/core/viewsets.py deleted file mode 100644 index f4ebd8bc..00000000 --- a/core/viewsets.py +++ /dev/null @@ -1,1112 +0,0 @@ -import logging -import uuid -from uuid import UUID - -from django.db.models import Q, QuerySet -from django.http import Http404 -from django.shortcuts import get_object_or_404 -from django.utils.decorators import method_decorator -from django.utils.translation import gettext_lazy as _ -from django_filters.rest_framework import DjangoFilterBackend -from django_ratelimit.decorators import ratelimit -from djangorestframework_camel_case.render import CamelCaseJSONRenderer -from drf_spectacular.utils import extend_schema_view -from rest_framework import status -from rest_framework.decorators import action -from rest_framework.exceptions import PermissionDenied -from rest_framework.renderers import MultiPartRenderer -from rest_framework.response import Response -from rest_framework.viewsets import ModelViewSet -from rest_framework_xml.renderers import XMLRenderer -from rest_framework_yaml.renderers import YAMLRenderer - -from core.docs.drf.viewsets import ( - ADDRESS_SCHEMA, - ATTRIBUTE_GROUP_SCHEMA, - ATTRIBUTE_SCHEMA, - ATTRIBUTE_VALUE_SCHEMA, - CATEGORY_SCHEMA, - FEEDBACK_SCHEMA, - ORDER_PRODUCT_SCHEMA, - ORDER_SCHEMA, - PRODUCT_SCHEMA, - WISHLIST_SCHEMA, -) -from core.filters import AddressFilter, BrandFilter, CategoryFilter, FeedbackFilter, OrderFilter, ProductFilter -from core.models import ( - Address, - Attribute, - AttributeGroup, - AttributeValue, - Brand, - Category, - Feedback, - Order, - OrderProduct, - Product, - ProductImage, - ProductTag, - PromoCode, - Promotion, - Stock, - Vendor, - Wishlist, -) -from core.permissions import EvibesPermission -from core.serializers import ( - AddOrderProductSerializer, - AddressAutocompleteInputSerializer, - AddressCreateSerializer, - AddressSerializer, - AddressSuggestionSerializer, - AddWishlistProductSerializer, - AttributeDetailSerializer, - AttributeGroupDetailSerializer, - AttributeGroupSimpleSerializer, - AttributeSimpleSerializer, - AttributeValueDetailSerializer, - AttributeValueSimpleSerializer, - BrandDetailSerializer, - BrandSimpleSerializer, - BulkAddOrderProductsSerializer, - BulkAddWishlistProductSerializer, - BulkRemoveOrderProductsSerializer, - BulkRemoveWishlistProductSerializer, - BuyOrderSerializer, - BuyUnregisteredOrderSerializer, - CategoryDetailSerializer, - CategorySimpleSerializer, - DoFeedbackSerializer, - FeedbackDetailSerializer, - FeedbackSimpleSerializer, - OrderDetailSerializer, - OrderProductSimpleSerializer, - OrderSimpleSerializer, - ProductDetailSerializer, - ProductImageDetailSerializer, - ProductImageSimpleSerializer, - ProductSimpleSerializer, - ProductTagDetailSerializer, - ProductTagSimpleSerializer, - PromoCodeDetailSerializer, - PromoCodeSimpleSerializer, - PromotionDetailSerializer, - PromotionSimpleSerializer, - RemoveOrderProductSerializer, - RemoveWishlistProductSerializer, - StockDetailSerializer, - StockSimpleSerializer, - VendorDetailSerializer, - VendorSimpleSerializer, - WishlistDetailSerializer, - WishlistSimpleSerializer, -) -from core.utils import format_attributes -from core.utils.messages import permission_denied_message -from core.utils.nominatim import fetch_address_suggestions -from evibes.settings import DEBUG -from payments.serializers import TransactionProcessSerializer - -logger = logging.getLogger("evibes") - - -class EvibesViewSet(ModelViewSet): - """ - Defines a viewset for managing Evibes-related operations. - - The EvibesViewSet class inherits from ModelViewSet and provides functionality - for handling actions and operations on Evibes entities. It includes support - for dynamic serializer classes based on the current action, customizable - permissions, and rendering formats. - - Attributes: - action_serializer_classes: Dictionary mapping action names to their specific - serializer classes. - additional: Dictionary to hold additional data related to the view. - permission_classes: List of permission classes applicable to this viewset. - renderer_classes: List of renderer classes supported for response formatting. - - Methods: - get_serializer_class(self): - Returns the serializer class for the current action or the default - serializer class from the parent ModelViewSet. - """ - - action_serializer_classes: dict = {} - additional: dict = {} - permission_classes = [EvibesPermission] - renderer_classes = [CamelCaseJSONRenderer, MultiPartRenderer, XMLRenderer, YAMLRenderer] - - def get_serializer_class(self): - return self.action_serializer_classes.get(self.action, super().get_serializer_class()) - - -@extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA) -class AttributeGroupViewSet(EvibesViewSet): - """ - Represents a viewset for managing AttributeGroup objects. - - Handles operations related to AttributeGroup, including filtering, - serialization, and retrieval of data. This class is part of the - application's API layer and provides a standardized way to process - requests and responses for AttributeGroup data. - - Attributes: - queryset (QuerySet): QuerySet for retrieving all AttributeGroup objects. - filter_backends (list): List of filter backends used to process filters - in requests. - filterset_fields (list): List of fields on which filtering operations - can be performed. - serializer_class (Serializer): Default serializer class used for - processing AttributeGroup data during non-list view operations. - action_serializer_classes (dict): Mapping of view actions to their - specific serializer classes, allowing customization of serialization - behavior for certain actions. - """ - - queryset = AttributeGroup.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["is_active"] - serializer_class = AttributeGroupDetailSerializer - action_serializer_classes = { - "list": AttributeGroupSimpleSerializer, - } - - -@extend_schema_view(**ATTRIBUTE_SCHEMA) -class AttributeViewSet(EvibesViewSet): - """ - Handles operations related to Attribute objects within the application. - - Provides a set of API endpoints to interact with Attribute data. This class - manages querying, filtering, and serialization of Attribute objects, allowing - dynamic control over the data returned, such as filtering by specific fields - or retrieving detailed versus simplified information depending on the request. - - Attributes: - queryset: The base QuerySet used to represent the set of Attribute - objects available to this viewset. - filter_backends: Defines the backends used for filtering request data, - enabling query flexibility. - filterset_fields: A list of model fields that can be filtered via the API. - serializer_class: Represents the serializer used by default for - serialization and deserialization of Attribute data. - action_serializer_classes: A mapping that defines serializers used for - specific actions, such as returning less detailed data for a `list` - action. - """ - - queryset = Attribute.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["group", "value_type", "is_active"] - serializer_class = AttributeDetailSerializer - action_serializer_classes = { - "list": AttributeSimpleSerializer, - } - - -@extend_schema_view(**ATTRIBUTE_VALUE_SCHEMA) -class AttributeValueViewSet(EvibesViewSet): - """ - A viewset for managing AttributeValue objects. - - This viewset provides functionality for listing, retrieving, creating, updating, and deleting - AttributeValue objects. It integrates with Django REST Framework's viewset mechanisms and uses - appropriate serializers for different actions. Filtering capabilities are provided through the - DjangoFilterBackend. - - Attributes: - queryset (QuerySet): The base queryset for AttributeValue objects. - filter_backends (list): A list of filtering backends applied to the viewset. - filterset_fields (list): Fields of the model that can be used for filtering. - serializer_class (Serializer): The default serializer class for the viewset. - action_serializer_classes (dict): A dictionary mapping action names to their corresponding - serializer classes. - """ - - queryset = AttributeValue.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["attribute", "is_active"] - serializer_class = AttributeValueDetailSerializer - action_serializer_classes = { - "list": AttributeValueSimpleSerializer, - } - - -@extend_schema_view(**CATEGORY_SCHEMA) -class CategoryViewSet(EvibesViewSet): - """ - Manages views for Category-related operations. - - The CategoryViewSet class is responsible for handling operations related to - the Category model in the system. It supports retrieving, filtering, and - serializing category data. The viewset also enforces permissions to ensure - that only authorized users can access specific data. - - Attributes: - queryset: The base queryset used to retrieve category data, including - prefetching related objects such as parent, children, attributes, - and tags. - filter_backends: A list of backends for applying filters to the category - data. - filterset_class: The filter class used to define filtering behavior for - the category queryset. - serializer_class: The default serializer class used for category objects - when no specific action serializer is applied. - action_serializer_classes: A dictionary mapping specific viewset actions - (e.g., "list") to their corresponding serializer classes. - - Methods: - get_queryset(): - Retrieves the queryset for the viewset, applying permission checks - and filtering out inactive categories for users without sufficient - permissions. - """ - - queryset = Category.objects.all().prefetch_related("parent", "children", "attributes", "tags") - filter_backends = [DjangoFilterBackend] - filterset_class = CategoryFilter - serializer_class = CategoryDetailSerializer - action_serializer_classes = { - "list": CategorySimpleSerializer, - } - - def get_queryset(self): - qs = super().get_queryset() - if self.request.user.has_perm("core.view_category"): - return qs - return qs.filter(is_active=True) - - -class BrandViewSet(EvibesViewSet): - """ - Represents a viewset for managing Brand instances. - - This class provides functionality for querying, filtering, and - serializing Brand objects. It uses Django's ViewSet framework - to simplify the implementation of API endpoints for Brand objects. - - Attributes: - queryset: The base queryset containing all Brand instances. - filter_backends: A list of filtering backends to apply to the - queryset. The default is [DjangoFilterBackend]. - filterset_class: The filter class used to define the filtering - logic for this viewset. The default is BrandFilter. - serializer_class: The default serializer class used for the - detailed representation of Brand objects. The default is - BrandDetailSerializer. - action_serializer_classes: A dictionary mapping specific actions - to their corresponding serializer classes. The "list" action - uses the BrandSimpleSerializer class. - """ - - queryset = Brand.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_class = BrandFilter - serializer_class = BrandDetailSerializer - action_serializer_classes = { - "list": BrandSimpleSerializer, - } - - -@extend_schema_view(**PRODUCT_SCHEMA) -class ProductViewSet(EvibesViewSet): - """ - Manages operations related to the `Product` model in the system. - - This class provides a viewset for managing products, including their filtering, serialization, - and operations on specific instances. It extends from `EvibesViewSet` to utilize common - functionality and integrates with Django REST framework for RESTful API operations. - Includes methods for retrieving product details, applying permissions, and accessing - related feedback of a product. - - Attributes: - queryset: The base queryset to retrieve `Product` objects with prefetch optimization. - filter_backends: Specifies the filtering mechanism for the list views. - filterset_class: Defines the filter class to be used for filtering products. - serializer_class: The default serializer class for product details. - action_serializer_classes: Specific serializer mappings for action methods. - lookup_field: Field representing the object's lookup value in URLs. - lookup_url_kwarg: Field key used to extract the object's lookup value from URL. - - Methods: - get_queryset: Retrieves the queryset with user-specific filtering applied. - get_object: Fetches a single object based on its identifier, applying permissions. - feedbacks: Fetches feedback associated with a specific product. - """ - - queryset = Product.objects.prefetch_related("tags", "attributes", "stocks", "images").all() - filter_backends = [DjangoFilterBackend] - filterset_class = ProductFilter - serializer_class = ProductDetailSerializer - action_serializer_classes = { - "list": ProductSimpleSerializer, - } - lookup_field = "lookup_value" - lookup_url_kwarg = "lookup_value" - - def get_queryset(self): - qs = super().get_queryset() - if self.request.user.has_perm("core.view_product"): - return qs - return qs.filter(is_active=True) - - def get_object(self): - queryset = self.filter_queryset(self.get_queryset()) - lookup_value = self.kwargs[self.lookup_url_kwarg] - - obj = None - - try: - uuid_obj = UUID(lookup_value) - obj = queryset.filter(uuid=uuid_obj).first() - except (ValueError, TypeError): - pass - - if not obj: - obj = queryset.filter(slug=lookup_value).first() - - if not obj: - name = "Product" - raise Http404(f"{name} does not exist: {lookup_value}") - - self.check_object_permissions(self.request, obj) - return obj - - @action(detail=True, methods=["get"], url_path="feedbacks") - def feedbacks(self, request, **kwargs): - lookup_val = kwargs.get(self.lookup_field) - try: - product = Product.objects.get(uuid=lookup_val) - feedbacks: QuerySet[Feedback] = ( # type: ignore - Feedback.objects.filter(order_product__product=product) - if request.user.has_perm("core.view_feedback") - else Feedback.objects.filter(order_product__product=product, is_active=True) - ) - return Response(data=FeedbackDetailSerializer(feedbacks, many=True).data) - except Product.DoesNotExist: - name = "Product" - return Response(status=status.HTTP_404_NOT_FOUND, data={"detail": _(f"{name} does not exist: {uuid}")}) - - -class VendorViewSet(EvibesViewSet): - """ - Represents a viewset for managing Vendor objects. - - This viewset allows fetching, filtering, and serializing Vendor data. - It defines the queryset, filter configurations, and serializer classes - used to handle different actions. The purpose of this class is to - provide streamlined access to Vendor-related resources through the - Django REST framework. - - Attributes: - queryset: A QuerySet containing all Vendor objects. - filter_backends: A list containing configured filter backends. - filterset_fields: A list of fields that can be used for filtering - Vendor records. - serializer_class: The default serializer class used for this - viewset. - action_serializer_classes: A dictionary mapping specific actions - (e.g., "list") to custom serializer classes for those actions. - """ - - queryset = Vendor.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["name", "markup_percent", "is_active"] - serializer_class = VendorDetailSerializer - action_serializer_classes = { - "list": VendorSimpleSerializer, - } - - -@extend_schema_view(**FEEDBACK_SCHEMA) -class FeedbackViewSet(EvibesViewSet): - """ - Representation of a view set handling Feedback objects. - - This class manages operations related to Feedback objects, including listing, - filtering, and retrieving details. The purpose of this view set is to provide - different serializers for different actions and implement permission-based - handling of accessible Feedback objects. It extends the base `EvibesViewSet` - and makes use of Django's filtering system for querying data. - - Attributes: - queryset: The base queryset for Feedback objects used in this view set. - filter_backends: List of filter backends to apply, specifically - `DjangoFilterBackend` for this view set. - filterset_class: Class specifying the filter set used for querying - Feedback objects. - serializer_class: Default serializer class used for this view set. - action_serializer_classes: A dictionary mapping action names to specific - serializer classes. For example, the "list" action uses - `FeedbackSimpleSerializer`. - """ - - queryset = Feedback.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_class = FeedbackFilter - serializer_class = FeedbackDetailSerializer - action_serializer_classes = { - "list": FeedbackSimpleSerializer, - } - - def get_queryset(self): - qs = super().get_queryset() - if self.request.user.has_perm("core.view_feedback"): - return qs - return qs.filter(is_active=True) - - -@extend_schema_view(**ORDER_SCHEMA) -class OrderViewSet(EvibesViewSet): - """ - ViewSet for managing orders and related operations. - - This class provides functionality to retrieve, modify, and manage order objects. - It includes various endpoints for handling order operations such as adding or - removing products, performing purchases for registered as well as unregistered - users, and retrieving the current authenticated user's pending orders. - - The ViewSet uses multiple serializers based on the specific action being - performed and enforces permissions accordingly while interacting with order data. - - Attributes: - lookup_field (str): Field name used for performing object lookup. - lookup_url_kwarg (str): URL keyword argument used for object lookup. Defaults - to `lookup_field`. - queryset (QuerySet): Default queryset for retrieving order objects, with - prefetched related order products. - filter_backends (list): List of backends applied for filtering the queryset. - filterset_class (type): Filtering class applied to the queryset for request-based - customizations. - serializer_class (type): Default serializer used if no specific serializer is - defined for an action. - action_serializer_classes (dict): Mapping of actions to their respective serializers. - Used to determine the serializer dynamically based on the requested action. - additional (dict): Additional settings for specific actions. - - Methods: - get_serializer_class: Returns the serializer class based on the specific - action being requested. - get_queryset: Adjusts the queryset based on the request user's permissions, - favoring anonymous or limited query access for unauthenticated users. - get_object: Retrieves a specific order object based on the lookup value, either - its UUID or a human-readable ID. - current: Retrieves the authenticated user's current pending order. - buy: Processes an order purchase for an authenticated user with optional parameters - such as balance and payment overrides, promocodes, and billing/shipping addresses. - buy_unregistered: Processes an order purchase for unauthenticated users with product, - customer details, and payment information. - add_order_product: Adds a product, with optional attributes, to an order specified by UUID. - remove_order_product: Removes a product, with optional attributes, from an order specified - by UUID. - bulk_add_order_products: Adds multiple products with optional attributes to an order. - bulk_remove_order_products: Removes multiple products with optional attributes from - an order. - """ - - lookup_field = "lookup_value" - lookup_url_kwarg = "lookup_value" - queryset = Order.objects.prefetch_related("order_products").all() - filter_backends = [DjangoFilterBackend] - filterset_class = OrderFilter - serializer_class = OrderDetailSerializer - action_serializer_classes = { - "list": OrderSimpleSerializer, - "buy": OrderDetailSerializer, - "add_order_product": AddOrderProductSerializer, - "remove_order_product": RemoveOrderProductSerializer, - } - additional = {"retrieve": "ALLOW"} - - def get_serializer_class(self): - return self.action_serializer_classes.get(self.action, super().get_serializer_class()) - - def get_queryset(self): - qs = super().get_queryset() - user = self.request.user - - if not user.is_authenticated: - return qs.filter(user__isnull=True) - - if user.has_perm("core.view_order"): - return qs - - return qs.filter(user=user) - - def get_object(self): - lookup_val = self.kwargs[self.lookup_field] - qs = self.get_queryset() - - try: - uuid.UUID(lookup_val) - uuid_q = Q(uuid=lookup_val) - except ValueError: - uuid_q = Q() - - obj = get_object_or_404(qs, uuid_q | Q(human_readable_id=lookup_val)) - self.check_object_permissions(self.request, obj) - return obj - - @action(detail=False, methods=["get"], url_path="current") - def current(self, request): - if not request.user.is_authenticated: - raise PermissionDenied(permission_denied_message) - order = Order.objects.get(user=request.user, status="PENDING") - return Response( - status=status.HTTP_200_OK, - data=OrderDetailSerializer(order).data, - ) - - @action(detail=True, methods=["post"], url_path="buy") - def buy(self, request, **kwargs): - serializer = BuyOrderSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - lookup_val = kwargs.get(self.lookup_field) - try: - order = Order.objects.get(user=request.user, uuid=lookup_val) - instance = order.buy( - force_balance=serializer.validated_data.get("force_balance"), - force_payment=serializer.validated_data.get("force_payment"), - promocode_uuid=serializer.validated_data.get("promocode_uuid"), - shipping_address=serializer.validated_data.get("shipping_address_uuid"), - billing_address=serializer.validated_data.get("billing_address_uuid"), - ) - match str(type(instance)): - case "": - return Response(status=status.HTTP_202_ACCEPTED, data=TransactionProcessSerializer(instance).data) - case "": - return Response(status=status.HTTP_200_OK, data=OrderDetailSerializer(instance).data) - case _: - raise TypeError(_(f"wrong type came from order.buy() method: {type(instance)!s}")) - except Order.DoesNotExist: - name = "Order" - return Response(status=status.HTTP_404_NOT_FOUND, data={"detail": _(f"{name} does not exist: {uuid}")}) - - @action(detail=False, methods=["post"], url_path="buy_unregistered") - @method_decorator(ratelimit(key="ip", rate="5/h" if not DEBUG else "888/h")) - def buy_unregistered(self, request): - serializer = BuyUnregisteredOrderSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - order = Order.objects.create(status="MOMENTAL") - products = [p["product_uuid"] for p in serializer.validated_data["products"]] - transaction = order.buy_without_registration( - products=products, - promocode_uuid=serializer.validated_data.get("promocode_uuid"), - customer_name=serializer.validated_data.get("customer_name"), - customer_email=serializer.validated_data.get("customer_email"), - customer_phone_number=serializer.validated_data.get("customer_phone_number"), - billing_customer_address=serializer.validated_data.get("billing_customer_address_uuid"), - shipping_customer_address=serializer.validated_data.get("shipping_customer_address_uuid"), - payment_method=serializer.validated_data.get("payment_method"), - ) - return Response(status=status.HTTP_202_ACCEPTED, data=TransactionProcessSerializer(transaction).data) - - @action(detail=True, methods=["post"], url_path="add_order_product") - def add_order_product(self, request, **kwargs): - serializer = AddOrderProductSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - lookup_val = kwargs.get(self.lookup_field) - try: - order = Order.objects.get(uuid=lookup_val) - if not (request.user.has_perm("core.add_orderproduct") or request.user == order.user): - raise PermissionDenied(permission_denied_message) - - order = order.add_product( - product_uuid=serializer.validated_data.get("product_uuid"), - attributes=format_attributes(serializer.validated_data.get("attributes")), - ) - return Response(status=status.HTTP_200_OK, data=OrderDetailSerializer(order).data) - except Order.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - @action(detail=True, methods=["post"], url_path="remove_order_product") - def remove_order_product(self, request, **kwargs): - serializer = RemoveOrderProductSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - lookup_val = kwargs.get(self.lookup_field) - try: - order = Order.objects.get(uuid=lookup_val) - if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user): - raise PermissionDenied(permission_denied_message) - - order = order.remove_product( - product_uuid=serializer.validated_data.get("product_uuid"), - attributes=format_attributes(serializer.validated_data.get("attributes")), - ) - return Response(status=status.HTTP_200_OK, data=OrderDetailSerializer(order).data) - except Order.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - @action(detail=True, methods=["post"], url_path="bulk_add_order_products") - def bulk_add_order_products(self, request, **kwargs): - serializer = BulkAddOrderProductsSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - lookup_val = kwargs.get(self.lookup_field) - try: - order = Order.objects.get(uuid=lookup_val) - if not (request.user.has_perm("core.add_orderproduct") or request.user == order.user): - raise PermissionDenied(permission_denied_message) - - order = order.bulk_add_products( - products=serializer.validated_data.get("products"), - ) - return Response(status=status.HTTP_200_OK, data=OrderDetailSerializer(order).data) - except Order.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - @action(detail=True, methods=["post"], url_path="bulk_remove_order_products") - def bulk_remove_order_products(self, request, **kwargs): - serializer = BulkRemoveOrderProductsSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - lookup_val = kwargs.get(self.lookup_field) - try: - order = Order.objects.get(uuid=lookup_val) - if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user): - raise PermissionDenied(permission_denied_message) - - order = order.bulk_remove_products( - products=serializer.validated_data.get("products"), - ) - return Response(status=status.HTTP_200_OK, data=OrderDetailSerializer(order).data) - except Order.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - -@extend_schema_view(**ORDER_PRODUCT_SCHEMA) -class OrderProductViewSet(EvibesViewSet): - """ - Provides a viewset for managing OrderProduct entities. - - This viewset enables CRUD operations and custom actions specific to the - OrderProduct model. It includes filtering, permission checks, and - serializer switching based on the requested action. Additionally, it - provides a detailed action for handling feedback on OrderProduct - instances. - - Attributes: - queryset (QuerySet): The base queryset for OrderProduct objects. - filter_backends (list): Backends responsible for handling filtering - mechanisms. - filterset_fields (list[str]): Fields available for API filtering. - serializer_class (Serializer): Default serializer class for CRUD - operations. - action_serializer_classes (dict[str, Serializer]): Mapping of - specific actions to their corresponding serializer classes. - - Methods: - get_queryset: Overrides the default queryset to enforce user - permissions. - - Actions: - do_feedback: Custom action to add, remove, or manage feedback for - an OrderProduct instance. - """ - - queryset = OrderProduct.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["order", "product", "status", "is_active"] - serializer_class = AttributeGroupDetailSerializer - action_serializer_classes = { - "list": OrderProductSimpleSerializer, - "do_feedback": DoFeedbackSerializer, - } - - def get_queryset(self): - qs = super().get_queryset() - user = self.request.user - - if user.has_perm("core.view_orderproduct"): - return qs - - return qs.filter(user=user) - - @action(detail=True, methods=["post"], url_path="do_feedback") - def do_feedback(self, request, **kwargs): - serializer = self.get_serializer(request.data) - serializer.is_valid(raise_exception=True) - try: - order_product = OrderProduct.objects.get(uuid=kwargs.get("pk")) - if not (request.user.has_perm("core.change_orderproduct") or request.user == order_product.order.user): - raise PermissionDenied(permission_denied_message) - feedback = order_product.do_feedback( - rating=serializer.validated_data.get("rating"), - comment=serializer.validated_data.get("comment"), - action=serializer.validated_data.get("action"), - ) - match serializer.validated_data.get("action"): - case "add": - return Response(data=FeedbackDetailSerializer(feedback).data, status=status.HTTP_201_CREATED) - case "remove": - return Response(status=status.HTTP_204_NO_CONTENT) - case _: - return Response(status=status.HTTP_400_BAD_REQUEST) - except OrderProduct.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - -class ProductImageViewSet(EvibesViewSet): - """ - Manages operations related to Product images in the application. - - This class-based view set provides endpoints to manage and access ProductImage - objects. It supports filtering, serialization, and customized serializers for - different actions to handle ProductImage data. - - Attributes: - queryset (QuerySet): A Django QuerySet consisting of all ProductImage - instances within the system. - filter_backends (list): A list of filter backends that determine the - filtering behavior on querysets. Set to [DjangoFilterBackend]. - filterset_fields (list): Fields that can be used for filtering data. - Includes "product", "priority", and "is_active". - serializer_class (Serializer): The default serializer class used for - serializing and deserializing ProductImage data. Set to - ProductImageDetailSerializer. - action_serializer_classes (dict): A mapping of action names to specific - serializer classes. For the "list" action, ProductImageSimpleSerializer - is used. - """ - - queryset = ProductImage.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["product", "priority", "is_active"] - serializer_class = ProductImageDetailSerializer - action_serializer_classes = { - "list": ProductImageSimpleSerializer, - } - - -class PromoCodeViewSet(EvibesViewSet): - """ - Manages the retrieval and handling of PromoCode instances through various - API actions. - - This class extends the functionality of the EvibesViewSet to provide a - customized view set for PromoCode objects. It includes filtering capabilities, - utilizes specific serializers for different actions, and limits data access - based on user permissions. The primary purpose is to enable API operations - related to PromoCodes while enforcing security and filtering. - - Attributes: - queryset: A queryset of all PromoCode objects in the database. - filter_backends: Backend classes responsible for filtering queryset data. - filterset_fields: Fields supported for filtering PromoCode data. - serializer_class: The default serializer class used for instances when no - specific action-based serializer is defined. - action_serializer_classes: A dictionary mapping specific actions (like - "list") to their corresponding serializer classes. - """ - - queryset = PromoCode.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["code", "discount_amount", "discount_percent", "start_time", "end_time", "used_on", "is_active"] - serializer_class = PromoCodeDetailSerializer - action_serializer_classes = { - "list": PromoCodeSimpleSerializer, - } - - def get_queryset(self): - qs = super().get_queryset() - user = self.request.user - - if user.has_perm("core.view_promocode"): - return qs - - return qs.filter(user=user) - - -class PromotionViewSet(EvibesViewSet): - """ - Represents a view set for managing promotions. - - This class provides operations to handle retrieval, filtering, and serialization - of promotion objects. It leverages Django REST framework capabilities such as - queryset management, filter backends, and serializer customization for handling - different views or actions efficiently. - """ - - queryset = Promotion.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["name", "discount_percent", "is_active"] - serializer_class = PromotionDetailSerializer - action_serializer_classes = { - "list": PromotionSimpleSerializer, - } - - -class StockViewSet(EvibesViewSet): - """ - Handles operations related to Stock data in the system. - - The StockViewSet class is a viewset that provides methods for retrieving, - filtering, and serializing Stock data. It utilizes Django's filter - backends to enable filtering based on specified fields and supports - custom serializers for different actions. - - Attributes: - queryset (QuerySet): A queryset of all Stock objects. - filter_backends (list): A list of filter backends to be applied. - filterset_fields (list of str): Fields on which the filtering - is permitted. These fields include "vendor", "product", "sku", - and "is_active". - serializer_class (Serializer): The primary serializer used - for Stock detail representation. - action_serializer_classes (dict): A dictionary mapping action names - to their respective serializers. For the "list" action, - StockSimpleSerializer is used. - """ - - queryset = Stock.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["vendor", "product", "sku", "is_active"] - serializer_class = StockDetailSerializer - action_serializer_classes = { - "list": StockSimpleSerializer, - } - - -@extend_schema_view(**WISHLIST_SCHEMA) -class WishlistViewSet(EvibesViewSet): - """ - ViewSet for managing Wishlist operations. - - The WishlistViewSet provides endpoints for interacting with a user's wish list, - allowing for the retrieval, modification, and customization of products within - the wish list. This ViewSet facilitates functionality such as adding, removing, - and bulk actions for wishlist products. Permission checks are integrated to - ensure that users can only manage their own wishlists, unless explicit permissions - are granted. - - Attributes - ---------- - queryset : QuerySet - The base queryset for retrieving wishlist objects. - filter_backends : list - List of backend filters to apply to the queryset. - filterset_fields : list - Fields for which filtering is allowed in queries. - serializer_class : Serializer - The default serializer class used for wishlist objects. - action_serializer_classes : dict - A map of serializers used for specific actions. - - Methods - ------- - get_queryset() - Retrieves the queryset, filtered based on the user's permissions. - current(request) - Retrieves the currently authenticated user's wishlist. - add_wishlist_product(request, **kwargs) - Adds a product to a specific wishlist. - remove_wishlist_product(request, **kwargs) - Removes a product from a specific wishlist. - bulk_add_wishlist_products(request, **kwargs) - Adds multiple products to a specific wishlist. - bulk_remove_wishlist_products(request, **kwargs) - Removes multiple products from a specific wishlist. - """ - - queryset = Wishlist.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["user", "is_active"] - serializer_class = WishlistDetailSerializer - action_serializer_classes = { - "list": WishlistSimpleSerializer, - } - - def get_queryset(self): - qs = super().get_queryset() - user = self.request.user - - if user.has_perm("core.view_wishlist"): - return qs - - return qs.filter(user=user) - - @action(detail=False, methods=["get"], url_path="current") - def current(self, request): - if not request.user.is_authenticated: - raise PermissionDenied(permission_denied_message) - wishlist = Wishlist.objects.get(user=request.user) - if not request.user == wishlist.user: - raise PermissionDenied(permission_denied_message) - return Response( - status=status.HTTP_200_OK, - data=WishlistDetailSerializer(wishlist).data, - ) - - @action(detail=True, methods=["post"], url_path="add_wishlist_product") - def add_wishlist_product(self, request, **kwargs): - serializer = AddWishlistProductSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) - if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): - raise PermissionDenied(permission_denied_message) - - wishlist = wishlist.add_product( - product_uuid=serializer.validated_data.get("product_uuid"), - ) - - return Response(status=status.HTTP_200_OK, data=WishlistDetailSerializer(wishlist).data) - except Wishlist.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - @action(detail=True, methods=["post"], url_path="remove_wishlist_product") - def remove_wishlist_product(self, request, **kwargs): - serializer = RemoveWishlistProductSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) - if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): - raise PermissionDenied(permission_denied_message) - - wishlist = wishlist.remove_product( - product_uuid=serializer.validated_data.get("product_uuid"), - ) - - return Response(status=status.HTTP_200_OK, data=WishlistDetailSerializer(wishlist).data) - except Wishlist.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - @action(detail=True, methods=["post"], url_path="bulk_add_wishlist_product") - def bulk_add_wishlist_products(self, request, **kwargs): - serializer = BulkAddWishlistProductSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) - if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): - raise PermissionDenied(permission_denied_message) - - wishlist = wishlist.bulk_add_products( - product_uuids=serializer.validated_data.get("product_uuids"), - ) - - return Response(status=status.HTTP_200_OK, data=WishlistDetailSerializer(wishlist).data) - except Order.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - @action(detail=True, methods=["post"], url_path="bulk_remove_wishlist_product") - def bulk_remove_wishlist_products(self, request, **kwargs): - serializer = BulkRemoveWishlistProductSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) - if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): - raise PermissionDenied(permission_denied_message) - - wishlist = wishlist.bulk_remove_products( - product_uuids=serializer.validated_data.get("product_uuids"), - ) - - return Response(status=status.HTTP_200_OK, data=WishlistDetailSerializer(wishlist).data) - except Order.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - -@extend_schema_view(**ADDRESS_SCHEMA) -class AddressViewSet(EvibesViewSet): - """ - This class provides viewset functionality for managing `Address` objects. - - The AddressViewSet class enables CRUD operations, filtering, and custom actions - related to address entities. It includes specialized behaviors for different HTTP - methods, serializer overrides, and permission handling based on the request context. - - Attributes: - pagination_class: Specifies pagination class for the viewset, set to None. - filter_backends: List of backend classes for filtering querysets. - filterset_class: Specifies the filter class for filtering address objects. - queryset: Default queryset containing all Address objects. - serializer_class: Default serializer class for address objects. - additional: Dictionary of additional options for this viewset. - """ - - pagination_class = None - filter_backends = [DjangoFilterBackend] - filterset_class = AddressFilter - queryset = Address.objects.all() - serializer_class = AddressSerializer - additional = {"create": "ALLOW"} - - def get_serializer_class(self): - if self.action == "create": - return AddressCreateSerializer - if self.action == "autocomplete": - return AddressAutocompleteInputSerializer - return AddressSerializer - - def get_queryset(self): - if self.request.user.has_perm("core.view_address"): - return super().get_queryset() - - if self.request.user.is_authenticated: - return super().get_queryset().filter(user=self.request.user) - - return Address.objects.none() - - def create(self, request, **kwargs): - create_serializer = AddressCreateSerializer(data=request.data, context={"request": request}) - create_serializer.is_valid(raise_exception=True) - - address_obj = create_serializer.create(create_serializer.validated_data) - - output_serializer = AddressSerializer(address_obj, context={"request": request}) - - return Response( - status=status.HTTP_201_CREATED, - data=output_serializer.data, - ) - - @action(detail=False, methods=["get"], url_path="autocomplete") - def autocomplete(self, request): - serializer = AddressAutocompleteInputSerializer(data=request.query_params) - serializer.is_valid(raise_exception=True) - - q = serializer.validated_data["q"] - limit = serializer.validated_data["limit"] - - try: - suggestions = fetch_address_suggestions(query=q, limit=limit) - serializer = AddressSuggestionSerializer(suggestions, many=True) - return Response( - serializer.data, - status=status.HTTP_200_OK, - ) - except Exception as e: - return Response( - {"detail": _(f"Geocoding error: {e}")}, - status=status.HTTP_502_BAD_GATEWAY, - ) - - -class ProductTagViewSet(EvibesViewSet): - """ - Handles operations related to Product Tags within the application. - - This class provides functionality for retrieving, filtering, and serializing - Product Tag objects. It supports flexible filtering on specific attributes - using the specified filter backend and dynamically uses different serializers - based on the action being performed. - - Attributes: - queryset: The base queryset containing all ProductTag objects. - filter_backends: A list of backends used to filter the queryset. - filterset_fields: Fields available for filtering the queryset. Includes - 'tag_name' for filtering by the name of the tag, and 'is_active' for - filtering active/inactive tags. - serializer_class: The default serializer class used when no specific - serializer is defined for an action. - action_serializer_classes: A dictionary mapping specific actions (e.g., - 'list') to custom serializers. Utilizes ProductTagSimpleSerializer - for the 'list' action. - """ - - queryset = ProductTag.objects.all() - filter_backends = [DjangoFilterBackend] - filterset_fields = ["tag_name", "is_active"] - serializer_class = ProductTagDetailSerializer - action_serializer_classes = { - "list": ProductTagSimpleSerializer, - } diff --git a/docker-compose.yml b/docker-compose.yml index f880c9ab..4a0b5dc2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: container_name: app build: context: . - dockerfile: ./Dockerfiles/Dockerfile.app + dockerfile: ./Dockerfiles/app.Dockerfile restart: always volumes: - .:/app @@ -31,7 +31,7 @@ services: image: postgis/postgis:17-3.5 restart: always volumes: - - ./services_data/postgres:/var/lib/postgresql/data/ + - postgres-data:/var/lib/postgresql/data/ ports: - "5432:5432" env_file: @@ -47,6 +47,7 @@ services: container_name: postgres_exporter image: quay.io/prometheuscommunity/postgres-exporter:v0.17.0 restart: always + profiles: ["monitoring"] env_file: - .env environment: @@ -61,10 +62,8 @@ services: image: redis:7.4 restart: always command: redis-server --save "" --appendonly no --slave-read-only no --requirepass "$REDIS_PASSWORD" - ports: - - "6379:6379" volumes: - - ./services_data/redis:/data + - redis-data:/data env_file: - .env logging: *default-logging @@ -78,6 +77,7 @@ services: container_name: redis_exporter image: oliver006/redis_exporter:v1.73.0 restart: always + profiles: ["monitoring"] env_file: - .env environment: @@ -113,6 +113,7 @@ services: container_name: elasticsearch_exporter image: quay.io/prometheuscommunity/elasticsearch-exporter:v1.9.0 restart: always + profiles: ["monitoring"] env_file: - .env command: @@ -128,7 +129,7 @@ services: container_name: worker build: context: . - dockerfile: ./Dockerfiles/Dockerfile.worker + dockerfile: Dockerfiles/worker.Dockerfile restart: always volumes: - .:/app @@ -136,7 +137,38 @@ services: - .env environment: - BROKER_URL=${CELERY_BROKER_URL} + - TZ=${TIME_ZONE} depends_on: + database: + condition: service_healthy + redis: + condition: service_healthy + elasticsearch: + condition: service_healthy + logging: *default-logging + healthcheck: + test: [ "CMD-SHELL", "celery -A evibes status | grep -q 'OK'" ] + interval: 30s + timeout: 10s + retries: 5 + start_period: 15s + + stock_updater: + container_name: stock_updater + build: + context: . + dockerfile: Dockerfiles/stock_updater.Dockerfile + restart: always + volumes: + - .:/app + env_file: + - .env + environment: + - BROKER_URL=${CELERY_BROKER_URL} + - TZ=${TIME_ZONE} + depends_on: + database: + condition: service_healthy redis: condition: service_healthy elasticsearch: @@ -153,22 +185,21 @@ services: container_name: beat build: context: . - dockerfile: ./Dockerfiles/Dockerfile.beat + dockerfile: Dockerfiles/beat.Dockerfile restart: always volumes: - .:/app env_file: - .env + environment: + - BROKER_URL=${CELERY_BROKER_URL} + - TZ=${TIME_ZONE} depends_on: - worker: + database: + condition: service_healthy + redis: condition: service_healthy logging: *default-logging - healthcheck: - test: [ "CMD", "bash", "-c", "pgrep -f 'celery beat' >/dev/null" ] - interval: 30s - timeout: 10s - retries: 5 - start_period: 15s prometheus: container_name: prometheus @@ -188,5 +219,7 @@ services: volumes: + postgres-data: + redis-data: es-data: prometheus-data: diff --git a/blog/__init__.py b/engine/__init__.py similarity index 100% rename from blog/__init__.py rename to engine/__init__.py diff --git a/blog/docs/__init__.py b/engine/blog/__init__.py similarity index 100% rename from blog/docs/__init__.py rename to engine/blog/__init__.py diff --git a/blog/admin.py b/engine/blog/admin.py similarity index 53% rename from blog/admin.py rename to engine/blog/admin.py index 44a1d244..a9d790ee 100644 --- a/blog/admin.py +++ b/engine/blog/admin.py @@ -1,19 +1,22 @@ -from django.contrib import admin +from django.contrib.admin import register +from django.db.models import TextField from django_summernote.admin import SummernoteModelAdminMixin +from unfold.admin import ModelAdmin +from unfold_markdown import MarkdownWidget -from core.admin import BasicModelAdmin, FieldsetsMixin - -from .models import Post, PostTag +from engine.blog.models import Post, PostTag +from engine.core.admin import ActivationActionsMixin, FieldsetsMixin -@admin.register(Post) -class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, BasicModelAdmin): +@register(Post) +class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] list_display = ("title", "author", "slug", "created", "modified") list_filter = ("author", "tags", "created", "modified") search_fields = ("title", "content", "slug") filter_horizontal = ("tags",) date_hierarchy = "created" - autocomplete_fields = ("author", "tags") + autocomplete_fields = ("tags",) + formfield_overrides = {TextField: {"widget": MarkdownWidget}} readonly_fields = ( "uuid", "slug", @@ -29,12 +32,13 @@ class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, BasicModelAdmin): "file", ] relation_fields = [ + "author", "tags", ] -@admin.register(PostTag) -class PostTagAdmin(admin.ModelAdmin): +@register(PostTag) +class PostTagAdmin(ModelAdmin): # type: ignore [type-arg] list_display = ("tag_name", "name") search_fields = ("tag_name", "name") ordering = ("tag_name",) diff --git a/blog/apps.py b/engine/blog/apps.py similarity index 56% rename from blog/apps.py rename to engine/blog/apps.py index eac2df44..500c1bdd 100644 --- a/blog/apps.py +++ b/engine/blog/apps.py @@ -4,13 +4,10 @@ from django.utils.translation import gettext_lazy as _ class BlogConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "blog" + name = "engine.blog" verbose_name = _("blog") - icon = "fa fa-solid fa-book" - priority = 86 - hide = False # noinspection PyUnresolvedReferences - def ready(self): - import blog.elasticsearch.documents - import blog.signals # noqa: F401 + def ready(self) -> None: + import engine.blog.elasticsearch.documents + import engine.blog.signals # noqa: F401 diff --git a/blog/docs/drf/__init__.py b/engine/blog/docs/__init__.py similarity index 100% rename from blog/docs/drf/__init__.py rename to engine/blog/docs/__init__.py diff --git a/blog/elasticsearch/__init__.py b/engine/blog/docs/drf/__init__.py similarity index 100% rename from blog/elasticsearch/__init__.py rename to engine/blog/docs/drf/__init__.py diff --git a/blog/docs/drf/views.py b/engine/blog/docs/drf/views.py similarity index 100% rename from blog/docs/drf/views.py rename to engine/blog/docs/drf/views.py diff --git a/engine/blog/docs/drf/viewsets.py b/engine/blog/docs/drf/viewsets.py new file mode 100644 index 00000000..27fee717 --- /dev/null +++ b/engine/blog/docs/drf/viewsets.py @@ -0,0 +1,23 @@ +from django.utils.translation import gettext_lazy as _ +from drf_spectacular.utils import extend_schema +from rest_framework import status + +from engine.core.docs.drf import BASE_ERRORS +from engine.blog.serializers import PostSerializer + +POST_SCHEMA = { + "list": extend_schema( + tags=[ + "blog", + ], + summary=_("list all posts (read-only)"), + responses={status.HTTP_200_OK: PostSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "blog", + ], + summary=_("retrieve a single post (read-only)"), + responses={status.HTTP_200_OK: PostSerializer(), **BASE_ERRORS}, + ), +} diff --git a/blog/graphene/__init__.py b/engine/blog/elasticsearch/__init__.py similarity index 100% rename from blog/graphene/__init__.py rename to engine/blog/elasticsearch/__init__.py diff --git a/blog/elasticsearch/documents.py b/engine/blog/elasticsearch/documents.py similarity index 64% rename from blog/elasticsearch/documents.py rename to engine/blog/elasticsearch/documents.py index 9a2c8b70..0a7b0005 100644 --- a/blog/elasticsearch/documents.py +++ b/engine/blog/elasticsearch/documents.py @@ -1,17 +1,18 @@ -from django_elasticsearch_dsl import Document, fields +from django_elasticsearch_dsl import fields from django_elasticsearch_dsl.registries import registry -from blog.models import Post -from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin +from engine.blog.models import Post +from engine.core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields +from engine.core.elasticsearch.documents import BaseDocument -class PostDocument(ActiveOnlyMixin, Document): +class PostDocument(ActiveOnlyMixin, BaseDocument): # type: ignore [misc] title = fields.TextField( attr="title", analyzer="standard", fields={ "raw": fields.KeywordField(ignore_above=256), - "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), "phonetic": fields.TextField(analyzer="name_phonetic"), }, ) @@ -29,8 +30,9 @@ class PostDocument(ActiveOnlyMixin, Document): model = Post fields = ["uuid"] - def prepare_title(self, instance): + def prepare_title(self, instance: Post) -> str: return getattr(instance, "title", "") or "" +add_multilang_fields(PostDocument) registry.register_document(PostDocument) diff --git a/blog/filters.py b/engine/blog/filters.py similarity index 83% rename from blog/filters.py rename to engine/blog/filters.py index 42986097..fd6f1db3 100644 --- a/blog/filters.py +++ b/engine/blog/filters.py @@ -1,10 +1,10 @@ from django_filters import CharFilter, FilterSet, OrderingFilter, UUIDFilter -from blog.models import Post -from core.filters import CaseInsensitiveListFilter +from engine.blog.models import Post +from engine.core.filters import CaseInsensitiveListFilter -class PostFilter(FilterSet): +class PostFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") slug = CharFilter(field_name="slug", lookup_expr="exact") author = UUIDFilter(field_name="author__uuid", lookup_expr="exact") diff --git a/blog/migrations/__init__.py b/engine/blog/graphene/__init__.py similarity index 100% rename from blog/migrations/__init__.py rename to engine/blog/graphene/__init__.py diff --git a/blog/graphene/object_types.py b/engine/blog/graphene/object_types.py similarity index 92% rename from blog/graphene/object_types.py rename to engine/blog/graphene/object_types.py index 0ee27abc..08cef11e 100644 --- a/blog/graphene/object_types.py +++ b/engine/blog/graphene/object_types.py @@ -2,7 +2,7 @@ import graphene from graphene import relay from graphene_django import DjangoObjectType -from blog.models import Post, PostTag +from engine.blog.models import Post, PostTag class PostType(DjangoObjectType): diff --git a/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo b/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..025f2196 Binary files /dev/null and b/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po new file mode 100644 index 00000000..2118c458 --- /dev/null +++ b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po @@ -0,0 +1,114 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: ar-ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "المدونة" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "سرد جميع المشاركات (للقراءة فقط)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "استرداد منشور واحد (للقراءة فقط)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"يمثل نموذج منشور المدونة. تحدد فئة المشاركة بنية وسلوك مشاركة المدونة. " +"وتتضمن سمات للمؤلف والعنوان والمحتوى ومرفق الملف الاختياري والسبيكة " +"والعلامات المرتبطة بها. يفرض الصنف قيودًا مثل طلب إما محتوى أو مرفق ملف ولكن " +"ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على العنوان." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "عنوان المنشور" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "العنوان" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "هي صفحة ثابتة" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"هل هذا منشور لصفحة ذات عنوان URL ثابت (على سبيل المثال '/مساعدة/التسليم'؟)" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "المنشور" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "المنشورات" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "معرّف العلامة الداخلي لعلامة المنشور" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "اسم العلامة" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "اسم سهل الاستخدام لعلامة المنشور" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "اسم عرض العلامة" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "علامة المشاركة" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "علامات المشاركة" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"يغلف عمليات إدارة واسترجاع كيانات المنشور في مجموعة عرض نموذج للقراءة فقط. " +"هذه الفئة مصممة للتعامل مع كائنات المنشورات النشطة وتسمح بالترشيح بناءً على " +"مرشحات محددة. يتكامل مع نظام تصفية الواجهة الخلفية لـ Django ويضمن توافق " +"العمليات مع الأذونات المحددة. تشتمل مجموعة العرض أيضًا على تكوين إذن " +"\"استرداد\" إضافي." diff --git a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo new file mode 100644 index 00000000..b350ee60 Binary files /dev/null and b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po new file mode 100644 index 00000000..d5a4755b --- /dev/null +++ b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -0,0 +1,119 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: cs-cz\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Seznam všech příspěvků (pouze pro čtení)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Získání jednoho příspěvku (pouze pro čtení)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Představuje model příspěvku na blogu. Třída Post definuje strukturu a " +"chování příspěvku na blogu. Obsahuje atributy pro autora, název, obsah, " +"volitelnou přílohu, slug a přidružené značky. Třída vynucuje omezení, jako " +"je požadavek na obsah nebo přílohu souboru, ale ne obojí současně. Podporuje " +"také automatické generování slugu na základě názvu." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Název příspěvku" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Název" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "je statická stránka" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"je to příspěvek pro stránku se statickou adresou URL (např. `/help/" +"delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Příspěvek" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Příspěvky" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se " +"vylučují." + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "interní identifikátor tagu pro tag příspěvku" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Název štítku" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Uživatelsky přívětivý název pro značku příspěvku" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Zobrazení názvu štítku" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Označení příspěvku" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Štítky příspěvků" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Zapouzdřuje operace pro správu a načítání entit Post v sadě zobrazení modelu " +"pouze pro čtení. Tato třída je přizpůsobena pro práci s aktivními objekty " +"Post a umožňuje filtrování na základě definovaných filtrů. Integruje se s " +"backendovým systémem filtrování Djanga a zajišťuje soulad operací s " +"definovanými oprávněními. Sada zobrazení obsahuje také dodatečnou " +"konfiguraci oprávnění \"načíst\"." diff --git a/engine/blog/locale/da_DK/LC_MESSAGES/django.mo b/engine/blog/locale/da_DK/LC_MESSAGES/django.mo new file mode 100644 index 00000000..83be66a1 Binary files /dev/null and b/engine/blog/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/da_DK/LC_MESSAGES/django.po b/engine/blog/locale/da_DK/LC_MESSAGES/django.po new file mode 100644 index 00000000..c5fe897d --- /dev/null +++ b/engine/blog/locale/da_DK/LC_MESSAGES/django.po @@ -0,0 +1,117 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: da-dk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Vis alle indlæg (skrivebeskyttet)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Hent et enkelt indlæg (skrivebeskyttet)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Repræsenterer en blogindlægsmodel. Post-klassen definerer strukturen og " +"adfærden i et blogindlæg. Den indeholder attributter for forfatter, titel, " +"indhold, valgfri vedhæftet fil, slug og tilknyttede tags. Klassen håndhæver " +"begrænsninger som f.eks. at kræve enten indhold eller en vedhæftet fil, men " +"ikke begge dele på samme tid. Den understøtter også automatisk generering af " +"slugs baseret på titlen." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Indlæggets titel" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Titel" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "er en statisk side" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Er dette et indlæg til en side med statisk URL (f.eks. `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Indlæg" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Indlæg" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "Markdown-filer understøttes ikke - brug markdown-indhold i stedet!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "intern tag-identifikator for indlægs-tagget" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tag-navn" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Brugervenligt navn til posttagget" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Navn på tag-visning" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Tag til indlæg" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tags til indlæg" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Indkapsler operationer til håndtering og hentning af Post-enheder i et " +"skrivebeskyttet modelvisningssæt. Denne klasse er skræddersyet til at " +"håndtere Post-objekter, der er aktive, og tillader filtrering baseret på " +"definerede filtre. Den integreres med Djangos backend-filtreringssystem og " +"sikrer, at handlingerne er i overensstemmelse med de definerede tilladelser. " +"Visningssættet indeholder også en ekstra konfiguration af tilladelsen 'hent'." diff --git a/engine/blog/locale/de_DE/LC_MESSAGES/django.mo b/engine/blog/locale/de_DE/LC_MESSAGES/django.mo new file mode 100644 index 00000000..9ef22b24 Binary files /dev/null and b/engine/blog/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/de_DE/LC_MESSAGES/django.po b/engine/blog/locale/de_DE/LC_MESSAGES/django.po new file mode 100644 index 00000000..e840da7e --- /dev/null +++ b/engine/blog/locale/de_DE/LC_MESSAGES/django.po @@ -0,0 +1,123 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: de-de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Alle Beiträge auflisten (schreibgeschützt)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Einen einzelnen Beitrag abrufen (schreibgeschützt)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Stellt ein Blogpost-Modell dar. Die Klasse Post definiert die Struktur und " +"das Verhalten eines Blogeintrags. Sie enthält Attribute für Autor, Titel, " +"Inhalt, optionalen Dateianhang, Slug und zugehörige Tags. Die Klasse " +"erzwingt Einschränkungen, z. B. dass entweder der Inhalt oder ein " +"Dateianhang erforderlich ist, aber nicht beides gleichzeitig. Sie " +"unterstützt auch die automatische Slug-Generierung auf der Grundlage des " +"Titels." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Titel des Beitrags" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Titel" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "ist eine statische Seite" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. `/help/" +"delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Beitrag" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Beiträge" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen " +"Markdown-Inhalte!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - " +"beide schließen sich gegenseitig aus" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "interner Tag-Bezeichner für den Post-Tag" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tag name" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Benutzerfreundlicher Name für das Post-Tag" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Tag-Anzeigename" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Tag eintragen" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tags eintragen" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Kapselt Operationen zum Verwalten und Abrufen von Post-Entitäten in einem " +"schreibgeschützten Modell-View-Set. Diese Klasse ist auf die Handhabung " +"aktiver Post-Objekte zugeschnitten und ermöglicht die Filterung auf der " +"Grundlage definierter Filter. Sie integriert sich in das Backend-" +"Filtersystem von Django und stellt sicher, dass die Operationen mit den " +"definierten Berechtigungen übereinstimmen. Das View Set beinhaltet auch eine " +"zusätzliche 'retrieve' Berechtigungskonfiguration." diff --git a/engine/blog/locale/en_GB/LC_MESSAGES/django.mo b/engine/blog/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 00000000..19eced8a Binary files /dev/null and b/engine/blog/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/en_GB/LC_MESSAGES/django.po b/engine/blog/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 00000000..50d13e54 --- /dev/null +++ b/engine/blog/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# EVIBES GETTEXT TRANSLATIONS +# 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-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "List all posts (read-only)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Retrieve a single post (read-only)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Post's title" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Title" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "is static page" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Post" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Posts" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "Markdown files are not supported yer - use markdown content instead!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"a markdown file or markdown content must be provided - mutually exclusive" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "internal tag identifier for the post tag" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tag name" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "User-friendly name for the post tag" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Tag display name" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Post tag" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Post tags" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." diff --git a/engine/blog/locale/en_US/LC_MESSAGES/django.mo b/engine/blog/locale/en_US/LC_MESSAGES/django.mo new file mode 100644 index 00000000..f34a002b Binary files /dev/null and b/engine/blog/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/en_US/LC_MESSAGES/django.po b/engine/blog/locale/en_US/LC_MESSAGES/django.po new file mode 100644 index 00000000..5db6bbf7 --- /dev/null +++ b/engine/blog/locale/en_US/LC_MESSAGES/django.po @@ -0,0 +1,116 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: en-us\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "List all posts (read-only)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Retrieve a single post (read-only)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Post's title" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Title" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "is static page" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Post" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Posts" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "Markdown files are not supported yer - use markdown content instead!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"a markdown file or markdown content must be provided - mutually exclusive" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "internal tag identifier for the post tag" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tag name" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "User-friendly name for the post tag" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Tag display name" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Post tag" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Post tags" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." diff --git a/engine/blog/locale/es_ES/LC_MESSAGES/django.mo b/engine/blog/locale/es_ES/LC_MESSAGES/django.mo new file mode 100644 index 00000000..5729fa3f Binary files /dev/null and b/engine/blog/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/es_ES/LC_MESSAGES/django.po b/engine/blog/locale/es_ES/LC_MESSAGES/django.po new file mode 100644 index 00000000..977d1495 --- /dev/null +++ b/engine/blog/locale/es_ES/LC_MESSAGES/django.po @@ -0,0 +1,121 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: es-es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Listar todos los mensajes (sólo lectura)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Recuperar una única entrada (sólo lectura)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Representa un modelo de entrada de blog. La clase Post define la estructura " +"y el comportamiento de una entrada de blog. Incluye atributos para autor, " +"título, contenido, archivo adjunto opcional, slug y etiquetas asociadas. La " +"clase impone restricciones, como la de requerir contenido o un archivo " +"adjunto, pero no ambos simultáneamente. También admite la generación " +"automática de slug a partir del título." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Título del mensaje" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Título" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "es una página estática" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"¿se trata de una entrada para una página con URL estática (por ejemplo, `/" +"help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Publicar en" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Puestos" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"se debe proporcionar un archivo markdown o contenido markdown - mutuamente " +"excluyentes" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "identificador interno de la etiqueta post" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Nombre de la etiqueta" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Nombre fácil de usar para la etiqueta de la entrada" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Nombre de la etiqueta" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Etiqueta postal" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Etiquetas" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Encapsula operaciones para gestionar y recuperar entidades Post en un " +"conjunto de vistas de modelo de sólo lectura. Esta clase está adaptada para " +"manejar objetos Post que están activos y permite el filtrado basado en " +"filtros definidos. Se integra con el sistema de filtrado backend de Django y " +"asegura que las operaciones se alinean con los permisos definidos. El " +"conjunto de vistas también incluye una configuración adicional de permisos " +"de \"recuperación\"." diff --git a/engine/blog/locale/fa_IR/LC_MESSAGES/django.mo b/engine/blog/locale/fa_IR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..6c5906d1 Binary files /dev/null and b/engine/blog/locale/fa_IR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po new file mode 100644 index 00000000..1802ee62 --- /dev/null +++ b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" diff --git a/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo b/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..a611eed2 Binary files /dev/null and b/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po new file mode 100644 index 00000000..3bf88282 --- /dev/null +++ b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -0,0 +1,123 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: fr-fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Liste de tous les messages (en lecture seule)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Récupérer un seul message (en lecture seule)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Représente un modèle de billet de blog. La classe Post définit la structure " +"et le comportement d'un billet de blog. Elle comprend des attributs pour " +"l'auteur, le titre, le contenu, la pièce jointe facultative, la balise et " +"les balises associées. La classe impose des contraintes telles que " +"l'exigence d'un contenu ou d'un fichier joint, mais pas les deux " +"simultanément. Elle prend également en charge la génération automatique " +"d'une balise en fonction du titre." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Titre du message" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Titre" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "est une page statique" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"s'agit-il d'un message pour une page dont l'URL est statique (par exemple `/" +"help/delivery`) ?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Poste" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Postes" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du " +"contenu Markdown !" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent " +"mutuellement" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "identifiant interne de la balise post" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Nom du jour" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Nom convivial pour la balise post" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Nom d'affichage de l'étiquette" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Tag de poste" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tags de la poste" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Encapsule les opérations de gestion et d'extraction des entités Post dans un " +"ensemble de vues de modèle en lecture seule. Cette classe est conçue pour " +"gérer les objets Post qui sont actifs et permet un filtrage basé sur des " +"filtres définis. Elle s'intègre au système de filtrage du backend de Django " +"et garantit que les opérations s'alignent sur les permissions définies. Le " +"jeu de vues comprend également une configuration de permission " +"supplémentaire \"retrieve\"." diff --git a/engine/blog/locale/he_IL/LC_MESSAGES/django.mo b/engine/blog/locale/he_IL/LC_MESSAGES/django.mo new file mode 100644 index 00000000..2dc1913c Binary files /dev/null and b/engine/blog/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/he_IL/LC_MESSAGES/django.po b/engine/blog/locale/he_IL/LC_MESSAGES/django.po new file mode 100644 index 00000000..5bbf4749 --- /dev/null +++ b/engine/blog/locale/he_IL/LC_MESSAGES/django.po @@ -0,0 +1,111 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: he-il\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "בלוג" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "הצג את כל ההודעות (לקריאה בלבד)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "איתור פוסט בודד (לקריאה בלבד)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"מייצג מודל של פוסט בבלוג. מחלקת Post מגדירה את המבנה וההתנהגות של פוסט " +"בבלוג. היא כוללת תכונות עבור מחבר, כותרת, תוכן, קובץ מצורף אופציונלי, slug " +"ותגיות נלוות. המחלקה אוכפת אילוצים כגון דרישה לתוכן או לקובץ מצורף, אך לא " +"לשניהם בו-זמנית. היא תומכת גם ביצירה אוטומטית של slug על סמך הכותרת." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "כותרת הפוסט" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "כותרת" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "הוא דף סטטי" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "האם זו הודעה לדף עם כתובת URL סטטית (למשל `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "פוסט" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "פוסטים" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "מזהה תגיות פנימי עבור תגיות הפוסט" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "שם היום" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "שם ידידותי למשתמש עבור תגיות הפוסט" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "שם תצוגה של התג" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "תגית פוסט" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "תגיות פוסט" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"מכיל פעולות לניהול ואחזור ישויות Post במערך תצוגה של מודל לקריאה בלבד. מחלקה " +"זו מותאמת לטיפול באובייקטי Post פעילים ומאפשרת סינון על בסיס מסננים מוגדרים. " +"היא משתלבת במערכת הסינון האחורית של Django ומבטיחה שהפעולות תואמות את " +"ההרשאות המוגדרות. מערך התצוגה כולל גם תצורת הרשאה נוספת ל'אחזור'." diff --git a/blog/locale/hi_IN/LC_MESSAGES/django.mo b/engine/blog/locale/hi_IN/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/hi_IN/LC_MESSAGES/django.mo rename to engine/blog/locale/hi_IN/LC_MESSAGES/django.mo index 0fc354f2..7640ce00 100644 Binary files a/blog/locale/hi_IN/LC_MESSAGES/django.mo and b/engine/blog/locale/hi_IN/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po new file mode 100644 index 00000000..87b24f87 --- /dev/null +++ b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# EVIBES GETTEXT TRANSLATIONS +# 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-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" diff --git a/engine/blog/locale/hr_HR/LC_MESSAGES/django.mo b/engine/blog/locale/hr_HR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..6c5906d1 Binary files /dev/null and b/engine/blog/locale/hr_HR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po new file mode 100644 index 00000000..1802ee62 --- /dev/null +++ b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" diff --git a/engine/blog/locale/id_ID/LC_MESSAGES/django.mo b/engine/blog/locale/id_ID/LC_MESSAGES/django.mo new file mode 100644 index 00000000..ed8d0cc7 Binary files /dev/null and b/engine/blog/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/id_ID/LC_MESSAGES/django.po b/engine/blog/locale/id_ID/LC_MESSAGES/django.po new file mode 100644 index 00000000..d4a10394 --- /dev/null +++ b/engine/blog/locale/id_ID/LC_MESSAGES/django.po @@ -0,0 +1,121 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: id-id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Daftar semua postingan (hanya-baca)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Mengambil satu postingan (hanya-baca)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Mewakili model posting blog. Kelas Post mendefinisikan struktur dan perilaku " +"postingan blog. Kelas ini mencakup atribut untuk penulis, judul, konten, " +"lampiran file opsional, slug, dan tag yang terkait. Kelas ini memberlakukan " +"batasan seperti membutuhkan konten atau lampiran file, tetapi tidak keduanya " +"secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis " +"berdasarkan judul." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Judul postingan" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Judul" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "adalah halaman statis" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"apakah ini adalah postingan untuk halaman dengan URL statis (misalnya `/help/" +"pengiriman`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Pos" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Posting" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai " +"gantinya!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"file penurunan harga atau konten penurunan harga harus disediakan - tidak " +"boleh ada yang sama" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "pengidentifikasi tag internal untuk tag pos" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Nama tag" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Nama yang mudah digunakan untuk tag postingan" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Nama tampilan tag" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Tag pos" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tag pos" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Mengenkapsulasi operasi untuk mengelola dan mengambil entitas Post dalam set " +"tampilan model hanya-baca. Kelas ini dirancang untuk menangani objek Post " +"yang aktif dan memungkinkan penyaringan berdasarkan filter yang ditentukan. " +"Kelas ini terintegrasi dengan sistem penyaringan backend Django dan " +"memastikan operasi sesuai dengan izin yang ditentukan. Kumpulan view juga " +"mencakup konfigurasi izin 'retrieve' tambahan." diff --git a/engine/blog/locale/it_IT/LC_MESSAGES/django.mo b/engine/blog/locale/it_IT/LC_MESSAGES/django.mo new file mode 100644 index 00000000..76074b2f Binary files /dev/null and b/engine/blog/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/it_IT/LC_MESSAGES/django.po b/engine/blog/locale/it_IT/LC_MESSAGES/django.po new file mode 100644 index 00000000..53de0228 --- /dev/null +++ b/engine/blog/locale/it_IT/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: it-it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Elenco di tutti i messaggi (solo lettura)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Recuperare un singolo post (solo lettura)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Rappresenta il modello di un post di un blog. La classe Post definisce la " +"struttura e il comportamento di un post del blog. Include gli attributi per " +"l'autore, il titolo, il contenuto, l'allegato opzionale, lo slug e i tag " +"associati. La classe impone dei vincoli, come la richiesta di un contenuto o " +"di un file allegato, ma non di entrambi contemporaneamente. Supporta anche " +"la generazione automatica dello slug in base al titolo." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Titolo del post" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Titolo" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "è una pagina statica" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Si tratta di un post per una pagina con URL statico (ad esempio `/help/" +"delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Posta" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Messaggi" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "I file Markdown non sono supportati: usa invece i contenuti Markdown!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"deve essere fornito un file markdown o un contenuto markdown - si escludono " +"a vicenda" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "identificatore interno del tag post" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Nome del tag" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Nome intuitivo per il tag del post" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Nome del tag" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Post tag" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tag dei post" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Incapsula le operazioni per gestire e recuperare le entità Post in un " +"insieme di viste del modello di sola lettura. Questa classe è fatta su " +"misura per gestire gli oggetti Post che sono attivi e consente il filtraggio " +"in base ai filtri definiti. Si integra con il sistema di filtraggio del " +"backend di Django e garantisce che le operazioni siano in linea con i " +"permessi definiti. L'insieme di viste include anche un'ulteriore " +"configurazione di permessi 'retrieve'." diff --git a/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo b/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo new file mode 100644 index 00000000..9fdc2695 Binary files /dev/null and b/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po new file mode 100644 index 00000000..3d91f551 --- /dev/null +++ b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -0,0 +1,118 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: ja-jp\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "ブログ" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "すべての投稿をリストアップする(読み取り専用)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "単一の投稿を取得する(読み取り専用)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"ブログ記事のモデルを表します。Post クラスはブログ記事の構造と動作を定義しま" +"す。著者、タイトル、内容、オプションの添付ファイル、スラッグ、関連タグの属性" +"を含みます。このクラスは、内容か添付ファイルのどちらかを要求するが、両方は同" +"時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動" +"生成もサポートしています。" + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "投稿タイトル" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "タイトル" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "は静的ページ" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "これは静的URLのページ(例:`/help/delivery`)への投稿ですか?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "ポスト" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "投稿" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ" +"ンツを使用してください!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな" +"い。" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "投稿タグの内部タグ識別子" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "タグ名" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "投稿タグのユーザーフレンドリーな名前" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "タグ表示名" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "投稿タグ" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "投稿タグ" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"読み取り専用のモデルビューセットにおける Post エンティティの管理と取得のため" +"の操作をカプセル化します。このクラスは、アクティブな Post オブジェクトを扱" +"い、定義されたフィルタに基 づいてフィルタリングできるように調整されています。" +"Django のバックエンドのフィルタリングシステムと統合し、定義されたパーミッショ" +"ンに沿った操作を保証します。ビューセットには、追加の 'retrieve' 権限設定も含" +"まれます。" diff --git a/blog/locale/kk_KZ/LC_MESSAGES/django.mo b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/kk_KZ/LC_MESSAGES/django.mo rename to engine/blog/locale/kk_KZ/LC_MESSAGES/django.mo index 0fc354f2..7640ce00 100644 Binary files a/blog/locale/kk_KZ/LC_MESSAGES/django.mo and b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po new file mode 100644 index 00000000..87b24f87 --- /dev/null +++ b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# EVIBES GETTEXT TRANSLATIONS +# 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-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" diff --git a/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo b/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..f55e79c2 Binary files /dev/null and b/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po new file mode 100644 index 00000000..c1e50f04 --- /dev/null +++ b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po @@ -0,0 +1,114 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: ko-kr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "블로그" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "모든 게시물 나열(읽기 전용)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "단일 게시물 검색(읽기 전용)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"블로그 글 모델을 나타냅니다. Post 클래스는 블로그 글의 구조와 동작을 정의합니" +"다. 여기에는 작성자, 제목, 콘텐츠, 선택적 파일 첨부, 슬러그 및 관련 태그에 대" +"한 속성이 포함됩니다. 이 클래스는 콘텐츠 또는 파일 첨부 중 하나만 요구하고 " +"둘 다 동시에 요구하지 않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자" +"동 슬러그 생성도 지원합니다." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "게시물 제목" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "제목" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "는 정적 페이지입니다." + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "정적 URL(예: `/help/delivery`)이 있는 페이지의 게시물인가요?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "게시물" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "게시물" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다." + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "게시물 태그의 내부 태그 식별자" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "태그 이름" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "게시물 태그의 사용자 친화적인 이름" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "태그 표시 이름" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "게시물 태그" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "게시물 태그" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"읽기 전용 모델 보기 집합에서 Post 엔티티를 관리하고 검색하기 위한 작업을 캡슐" +"화합니다. 이 클래스는 활성 상태인 Post 개체를 처리하도록 맞춤화되어 있으며 정" +"의된 필터를 기반으로 필터링을 허용합니다. 이 클래스는 장고의 백엔드 필터링 시" +"스템과 통합되며 정의된 권한에 따라 작업이 이루어지도록 합니다. 보기 세트에는 " +"추가 '검색' 권한 구성도 포함되어 있습니다." diff --git a/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo b/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo new file mode 100644 index 00000000..76ac761c Binary files /dev/null and b/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po new file mode 100644 index 00000000..4f5d83b9 --- /dev/null +++ b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po @@ -0,0 +1,121 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: nl-nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Alle berichten weergeven (alleen-lezen)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Een enkel bericht ophalen (alleen-lezen)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Vertegenwoordigt een blogpostmodel. De klasse Post definieert de structuur " +"en het gedrag van een blogbericht. Ze bevat attributen voor auteur, titel, " +"inhoud, optionele bestandsbijlage, slug en geassocieerde tags. De klasse " +"dwingt beperkingen af zoals het vereisen van inhoud of een bestandsbijlage, " +"maar niet beide tegelijk. Het ondersteunt ook het automatisch genereren van " +"slugs op basis van de titel." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Titel van de post" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Titel" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "is statische pagina" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Is dit een bericht voor een pagina met een statische URL (bijv. `/help/" +"delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Plaats" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Berichten" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan " +"markdown-inhoud!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds " +"exclusief" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "interne tagidentifier voor de posttag" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tag naam" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Gebruiksvriendelijke naam voor de posttag" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Tag weergavenaam" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Post tag" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Post tags" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Kapselt operaties in voor het beheren en ophalen van Post-entiteiten in een " +"alleen-lezen model view set. Deze klasse is op maat gemaakt om actieve Post-" +"objecten te behandelen en staat filtering toe op basis van gedefinieerde " +"filters. Het integreert met Django's backend filtersysteem en zorgt ervoor " +"dat bewerkingen in lijn zijn met de gedefinieerde permissies. De view set " +"bevat ook een extra 'ophalen' permissie configuratie." diff --git a/engine/blog/locale/no_NO/LC_MESSAGES/django.mo b/engine/blog/locale/no_NO/LC_MESSAGES/django.mo new file mode 100644 index 00000000..51706420 Binary files /dev/null and b/engine/blog/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/no_NO/LC_MESSAGES/django.po b/engine/blog/locale/no_NO/LC_MESSAGES/django.po new file mode 100644 index 00000000..9b97fdd2 --- /dev/null +++ b/engine/blog/locale/no_NO/LC_MESSAGES/django.po @@ -0,0 +1,118 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: no-no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blogg" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Liste over alle innlegg (skrivebeskyttet)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Hent et enkelt innlegg (skrivebeskyttet)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Representerer en blogginnleggsmodell. Post-klassen definerer strukturen og " +"virkemåten til et blogginnlegg. Den inneholder attributter for forfatter, " +"tittel, innhold, valgfritt filvedlegg, slug og tilknyttede tagger. Klassen " +"håndhever begrensninger, for eksempel at enten innhold eller et filvedlegg " +"må være med, men ikke begge deler samtidig. Den støtter også automatisk " +"generering av slug basert på tittelen." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Innleggets tittel" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Title" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "er statisk side" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"er dette et innlegg for en side med statisk URL (f.eks. `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Post" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Innlegg" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "Markdown-filer støttes ikke - bruk markdown-innhold i stedet!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "intern tagg-identifikator for innleggstaggen" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tagg navn" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Brukervennlig navn for innleggstaggen" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Visningsnavn for taggen" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Post tag" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tagger for innlegg" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Innkapsler operasjoner for håndtering og henting av Post-enheter i et " +"skrivebeskyttet modellvisningssett. Denne klassen er skreddersydd for å " +"håndtere Post-objekter som er aktive, og tillater filtrering basert på " +"definerte filtre. Den integreres med Djangos backend-filtreringssystem og " +"sørger for at operasjonene er i tråd med de definerte tillatelsene. " +"Visningssettet inkluderer også en ekstra konfigurasjon for \"hent\"-" +"tillatelse." diff --git a/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo b/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo new file mode 100644 index 00000000..78d84543 Binary files /dev/null and b/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po new file mode 100644 index 00000000..cef7d647 --- /dev/null +++ b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -0,0 +1,119 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: pl-pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Lista wszystkich postów (tylko do odczytu)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Pobieranie pojedynczego wpisu (tylko do odczytu)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Reprezentuje model wpisu na blogu. Klasa Post definiuje strukturę i " +"zachowanie wpisu na blogu. Zawiera atrybuty autora, tytułu, treści, " +"opcjonalnego załącznika w postaci pliku, slug i powiązanych tagów. Klasa " +"wymusza ograniczenia, takie jak wymaganie treści lub załącznika pliku, ale " +"nie obu jednocześnie. Obsługuje również automatyczne generowanie slug na " +"podstawie tytułu." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Tytuł postu" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Tytuł" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "jest stroną statyczną" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Czy jest to post dla strony ze statycznym adresem URL (np. `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Post" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Posty" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się " +"wykluczające" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "wewnętrzny identyfikator tagu posta" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Nazwa tagu" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Przyjazna dla użytkownika nazwa tagu posta" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Wyświetlana nazwa znacznika" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Tag posta" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tagi postów" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Enkapsuluje operacje zarządzania i pobierania encji Post w zestawie widoków " +"modelu tylko do odczytu. Klasa ta jest dostosowana do obsługi obiektów Post, " +"które są aktywne i pozwala na filtrowanie w oparciu o zdefiniowane filtry. " +"Integruje się z backendowym systemem filtrowania Django i zapewnia zgodność " +"operacji ze zdefiniowanymi uprawnieniami. Zestaw widoków zawiera również " +"dodatkową konfigurację uprawnień \"retrieve\"." diff --git a/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo b/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..cb104a56 Binary files /dev/null and b/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 00000000..80a9fcab --- /dev/null +++ b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: pt-br\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Listar todas as postagens (somente leitura)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Recuperar um único post (somente leitura)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Representa um modelo de post de blog. A classe Post define a estrutura e o " +"comportamento de um post de blog. Ela inclui atributos para autor, título, " +"conteúdo, anexo de arquivo opcional, slug e tags associadas. A classe impõe " +"restrições, como exigir conteúdo ou um anexo de arquivo, mas não ambos " +"simultaneamente. Ela também oferece suporte à geração automática de slug com " +"base no título." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Título da postagem" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Título" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "é uma página estática" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Essa é uma postagem para uma página com URL estático (por exemplo, `/help/" +"delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Postar" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Publicações" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Os arquivos markdown não são suportados - use conteúdo markdown em vez disso!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "identificador de tag interno para a tag de postagem" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Nome da etiqueta" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Nome de fácil utilização para a tag de postagem" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Nome de exibição da tag" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Etiqueta de postagem" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Tags de postagem" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Encapsula operações de gerenciamento e recuperação de entidades Post em um " +"conjunto de visualizações de modelo somente leitura. Essa classe é adaptada " +"para lidar com objetos Post que estão ativos e permite a filtragem com base " +"em filtros definidos. Ela se integra ao sistema de filtragem de backend do " +"Django e garante que as operações estejam alinhadas com as permissões " +"definidas. O conjunto de visualizações também inclui uma configuração " +"adicional de permissão de \"recuperação\"." diff --git a/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo b/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo new file mode 100644 index 00000000..7f51f868 Binary files /dev/null and b/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po new file mode 100644 index 00000000..82f68227 --- /dev/null +++ b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po @@ -0,0 +1,121 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: ro-ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Listează toate postările (doar pentru citire)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Recuperează o singură postare (read-only)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Reprezintă un model de postare pe blog. Clasa Post definește structura și " +"comportamentul unei postări pe blog. Aceasta include atribute pentru autor, " +"titlu, conținut, fișier atașat opțional, slug și etichete asociate. Clasa " +"impune constrângeri, cum ar fi solicitarea fie a conținutului, fie a unui " +"fișier atașat, dar nu ambele simultan. De asemenea, acceptă generarea " +"automată a slug-ului pe baza titlului." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Titlul postului" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Titlul" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "este o pagină statică" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"este aceasta o postare pentru o pagină cu URL static (de exemplu `/help/" +"delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Post" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Mesaje" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut Markdown!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"trebuie furnizat un fișier markdown sau conținut markdown - se exclud " +"reciproc" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "identificator intern de etichetă pentru eticheta postului" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Nume etichetă" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Nume ușor de utilizat pentru eticheta postului" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Nume afișare etichetă" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Etichetă post" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Etichete poștale" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Încapsulează operațiunile de gestionare și extragere a entităților Post într-" +"un set de vizualizări de model numai pentru citire. Această clasă este " +"adaptată pentru a gestiona obiectele Post care sunt active și permite " +"filtrarea pe baza filtrelor definite. Se integrează cu sistemul de filtrare " +"din backend al Django și asigură alinierea operațiunilor cu permisiunile " +"definite. Setul de vizualizări include, de asemenea, o configurare " +"suplimentară a permisiunii \"retrieve\"." diff --git a/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo b/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo new file mode 100644 index 00000000..e69ccf0c Binary files /dev/null and b/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po new file mode 100644 index 00000000..e75c3ff4 --- /dev/null +++ b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po @@ -0,0 +1,121 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: ru-ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Блог" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Список всех сообщений (только для чтения)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Получение одного сообщения (только для чтения)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Представляет модель записи в блоге. Класс Post определяет структуру и " +"поведение записи в блоге. Он включает атрибуты автора, заголовка, " +"содержания, необязательного вложения файла, slug и связанные с ним теги. " +"Класс накладывает ограничения, например, требует либо содержимое, либо " +"вложение файла, но не то и другое одновременно. Он также поддерживает " +"автоматическую генерацию slug на основе заголовка." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Заголовок сообщения" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Название" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "это статическая страница" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Это сообщение для страницы со статическим URL (например, `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Пост" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Посты" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Файлы в формате Markdown не поддерживаются - используйте вместо них " +"содержимое в формате Markdown!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"необходимо предоставить файл разметки или содержимое разметки - " +"взаимоисключающие варианты" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "внутренний идентификатор тега для тега post" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Название тега" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Удобное для пользователя название тега поста" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Отображаемое имя тега" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Тэг поста" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Тэги постов" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Инкапсулирует операции по управлению и получению объектов Post в наборе " +"представлений модели, доступном только для чтения. Этот класс предназначен " +"для работы с активными объектами Post и позволяет осуществлять фильтрацию на " +"основе заданных фильтров. Он интегрируется с системой фильтрации бэкенда " +"Django и обеспечивает соответствие операций заданным разрешениям. Набор " +"представлений также включает дополнительную конфигурацию разрешения " +"'retrieve'." diff --git a/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo b/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo new file mode 100644 index 00000000..459abb9e Binary files /dev/null and b/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po new file mode 100644 index 00000000..97ae7afc --- /dev/null +++ b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po @@ -0,0 +1,119 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: sv-se\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blogg" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Lista alla inlägg (skrivskyddad)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Hämta ett enskilt inlägg (skrivskyddat)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Representerar en modell för blogginlägg. Klassen Post definierar strukturen " +"och beteendet för ett blogginlägg. Den innehåller attribut för författare, " +"titel, innehåll, valfri filbilaga, slug och tillhörande taggar. Klassen " +"upprätthåller begränsningar som t.ex. att antingen innehåll eller en " +"filbilaga krävs, men inte båda samtidigt. Den stöder också automatisk " +"sluggenerering baserat på titeln." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Inläggets titel" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Titel" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "är statisk sida" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"är detta ett inlägg för en sida med statisk URL (t.ex. `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Post" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Inlägg" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "Markdown-filer stöds inte - använd markdown-innehåll istället!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt " +"uteslutande" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "intern taggidentifierare för inläggstaggen" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tagg namn" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Användarvänligt namn för inläggstaggen" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Taggens visningsnamn" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Post tagg" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Taggar för inlägg" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Kapslar in operationer för att hantera och hämta Post-enheter i en " +"skrivskyddad modellvy. Denna klass är skräddarsydd för att hantera Post-" +"objekt som är aktiva och tillåter filtrering baserat på definierade filter. " +"Den integreras med Djangos backend-filtreringssystem och säkerställer att " +"operationerna överensstämmer med de definierade behörigheterna. " +"Vyuppsättningen innehåller också en ytterligare behörighetskonfiguration för " +"\"hämta\"." diff --git a/engine/blog/locale/th_TH/LC_MESSAGES/django.mo b/engine/blog/locale/th_TH/LC_MESSAGES/django.mo new file mode 100644 index 00000000..a21f32ac Binary files /dev/null and b/engine/blog/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/th_TH/LC_MESSAGES/django.po b/engine/blog/locale/th_TH/LC_MESSAGES/django.po new file mode 100644 index 00000000..fc069214 --- /dev/null +++ b/engine/blog/locale/th_TH/LC_MESSAGES/django.po @@ -0,0 +1,112 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: th-th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "บล็อก" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "แสดงรายการโพสต์ทั้งหมด (อ่านอย่างเดียว)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "ดึงโพสต์เดียว (อ่านอย่างเดียว)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"แทนแบบจำลองของโพสต์ในบล็อก คลาส Post กำหนดโครงสร้างและพฤติกรรมของโพสต์ในบล็อก " +"ประกอบด้วยแอตทริบิวต์สำหรับผู้เขียน, ชื่อเรื่อง, เนื้อหา, ไฟล์แนบ (ไม่บังคับ), slug " +"และแท็กที่เกี่ยวข้อง คลาสนี้บังคับใช้ข้อจำกัด เช่น ต้องมีเนื้อหาหรือไฟล์แนบอย่างใดอย่างหนึ่ง " +"แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug โดยอัตโนมัติจากชื่อเรื่อง" + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "ชื่อโพสต์" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "ชื่อเรื่อง" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "เป็นหน้าคงที่" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "นี่คือโพสต์สำหรับหน้าที่มี URL แบบคงที่ (เช่น `/help/delivery`)?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "โพสต์" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "โพสต์" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "ชื่อวัน" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "แสดงชื่อแท็ก" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "โพสต์แท็ก" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "ป้ายกำกับโพสต์" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"รวบรวมการดำเนินการสำหรับการจัดการและดึงข้อมูลเอนทิตีโพสต์ในชุดมุมมองแบบอ่านอย่างเดียว " +"คลาสนี้ถูกออกแบบมาเพื่อจัดการกับวัตถุโพสต์ที่ใช้งานอยู่และอนุญาตให้มีการกรองตามตัวกรองที่กำหนดไว้ " +"มันผสานรวมกับระบบการกรองแบ็กเอนด์ของ Django " +"และทำให้แน่ใจว่าการดำเนินการสอดคล้องกับสิทธิ์ที่กำหนดไว้ ชุดมุมมองยังรวมถึงการกำหนดค่าสิทธิ์ " +"'ดึงข้อมูล' เพิ่มเติมด้วย" diff --git a/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo b/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..6fabce87 Binary files /dev/null and b/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po new file mode 100644 index 00000000..c485516b --- /dev/null +++ b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: tr-tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Tüm gönderileri listele (salt okunur)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Tek bir gönderiyi al (salt okunur)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Bir blog yazısı modelini temsil eder. Post sınıfı, bir blog gönderisinin " +"yapısını ve davranışını tanımlar. Yazar, başlık, içerik, isteğe bağlı dosya " +"eki, slug ve ilişkili etiketler için öznitelikler içerir. Sınıf, içerik veya " +"dosya eki gerektirme ancak her ikisini aynı anda gerektirmeme gibi " +"kısıtlamalar uygular. Ayrıca başlığa dayalı otomatik slug oluşturmayı da " +"destekler." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Gönderinin başlığı" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Başlık" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "statik sayfadır" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Bu, statik URL'ye sahip bir sayfa (örneğin `/help/delivery`) için bir " +"gönderi mi?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Posta" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Mesajlar" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği " +"kullanın!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini dışlayan" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "gönderi etiketi için dahili etiket tanımlayıcısı" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Etiket adı" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Gönderi etiketi için kullanıcı dostu ad" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Etiket görünen adı" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Mesaj etiketi" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Gönderi etiketleri" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Salt okunur bir model görünüm kümesinde Post varlıklarını yönetme ve alma " +"işlemlerini kapsüller. Bu sınıf, aktif olan Post nesnelerini işlemek için " +"uyarlanmıştır ve tanımlanmış filtrelere göre filtrelemeye izin verir. " +"Django'nun arka uç filtreleme sistemi ile entegre olur ve işlemlerin " +"tanımlanan izinlerle uyumlu olmasını sağlar. Görünüm kümesi ayrıca ek bir " +"'retrieve' izin yapılandırması içerir." diff --git a/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo b/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo new file mode 100644 index 00000000..7872e11c Binary files /dev/null and b/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po new file mode 100644 index 00000000..060ab9e0 --- /dev/null +++ b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po @@ -0,0 +1,118 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: vi-vn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "Blog" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "Danh sách tất cả các bài đăng (chỉ đọc)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "Lấy một bài đăng duy nhất (chỉ đọc)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"Đại diện cho mô hình bài viết blog. Lớp Post định nghĩa cấu trúc và hành vi " +"của một bài viết blog. Nó bao gồm các thuộc tính cho tác giả, tiêu đề, nội " +"dung, tệp đính kèm tùy chọn, slug và các thẻ liên quan. Lớp này áp đặt các " +"ràng buộc như yêu cầu phải có nội dung hoặc tệp đính kèm nhưng không cả hai " +"cùng lúc. Nó cũng hỗ trợ tạo slug tự động dựa trên tiêu đề." + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "Tiêu đề bài đăng" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "Tiêu đề" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "là trang tĩnh" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Đây có phải là bài đăng cho một trang có URL tĩnh (ví dụ: `/help/delivery`) " +"không?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "Bài đăng" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "Bài đăng" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "" +"Tệp Markdown hiện chưa được hỗ trợ - hãy sử dụng nội dung Markdown thay thế!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "" +"Phải cung cấp tệp Markdown hoặc nội dung Markdown - hai tùy chọn này là " +"tương phản nhau." + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "Tên ngày" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "Tên thân thiện với người dùng cho thẻ bài viết" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "Hiển thị tên thẻ" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "Thẻ bài viết" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "Thẻ bài viết" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"Đóng gói các thao tác quản lý và truy xuất các thực thể Post trong một bộ " +"xem mô hình chỉ đọc. Lớp này được thiết kế để xử lý các đối tượng Post đang " +"hoạt động và cho phép lọc dựa trên các bộ lọc đã định nghĩa. Nó tích hợp với " +"hệ thống lọc phía sau của Django và đảm bảo các thao tác tuân thủ các quyền " +"hạn đã định nghĩa. Bộ xem cũng bao gồm một cấu hình quyền 'retrieve' bổ sung." diff --git a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 00000000..ffbe3cd0 Binary files /dev/null and b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 00000000..e190b359 --- /dev/null +++ b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,109 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 21:44+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: zh-hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/blog/apps.py:8 +msgid "blog" +msgstr "博客" + +#: engine/blog/docs/drf/viewsets.py:13 +msgid "list all posts (read-only)" +msgstr "列出所有帖子(只读)" + +#: engine/blog/docs/drf/viewsets.py:20 +msgid "retrieve a single post (read-only)" +msgstr "检索单个帖子(只读)" + +#: engine/blog/models.py:13 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" +"代表博文模型。帖子类定义了博文的结构和行为。它包括作者、标题、内容、可选文件" +"附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件" +"附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。" + +#: engine/blog/models.py:24 +msgid "post title" +msgstr "帖子标题" + +#: engine/blog/models.py:24 +msgid "title" +msgstr "标题" + +#: engine/blog/models.py:69 +msgid "is static page" +msgstr "是静态页面" + +#: engine/blog/models.py:70 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "这是静态 URL 页面(如 `/help/delivery`)的帖子吗?" + +#: engine/blog/models.py:77 +msgid "post" +msgstr "职位" + +#: engine/blog/models.py:78 +msgid "posts" +msgstr "职位" + +#: engine/blog/models.py:82 +msgid "markdown files are not supported yet - use markdown content instead" +msgstr "不支持 Markdown 文件,请使用 Markdown 内容!" + +#: engine/blog/models.py:84 +msgid "" +"a markdown file or markdown content must be provided - mutually exclusive" +msgstr "必须提供标记符文件或标记符内容 - 相互排斥" + +#: engine/blog/models.py:116 +msgid "internal tag identifier for the post tag" +msgstr "职位标签的内部标签标识符" + +#: engine/blog/models.py:117 +msgid "tag name" +msgstr "标签名称" + +#: engine/blog/models.py:121 +msgid "user-friendly name for the post tag" +msgstr "方便用户使用的帖子标签名称" + +#: engine/blog/models.py:122 +msgid "tag display name" +msgstr "标签显示名称" + +#: engine/blog/models.py:130 +msgid "post tag" +msgstr "职位标签" + +#: engine/blog/models.py:131 +msgid "post tags" +msgstr "帖子标签" + +#: engine/blog/viewsets.py:16 +msgid "" +"Encapsulates operations for managing and retrieving Post entities in a read-" +"only model view set. This class is tailored to handle Post objects that are " +"active and allows filtration based on defined filters. It integrates with " +"Django's backend filtering system and ensures operations align with the " +"defined permissions. The view set also includes an additional 'retrieve' " +"permission configuration." +msgstr "" +"该类封装了在只读模型视图集中管理和检索 \"帖子 \"实体的操作。该类专门用于处理" +"活动的 \"帖子 \"对象,并允许根据定义的过滤器进行过滤。它与 Django 的后台过滤" +"系统集成,确保操作与定义的权限一致。视图集还包括额外的 \"检索 \"权限配置。" diff --git a/engine/blog/migrations/0001_initial.py b/engine/blog/migrations/0001_initial.py new file mode 100644 index 00000000..5ba1c491 --- /dev/null +++ b/engine/blog/migrations/0001_initial.py @@ -0,0 +1,128 @@ +import uuid + +import django.db.models.deletion +import django_extensions.db.fields +import markdown_field.fields +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="PostTag", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "tag_name", + models.CharField( + help_text="internal tag identifier for the post tag", max_length=255, verbose_name="tag name" + ), + ), + ( + "name", + models.CharField( + help_text="user-friendly name for the post tag", + max_length=255, + unique=True, + verbose_name="tag display name", + ), + ), + ], + options={ + "verbose_name": "post tag", + "verbose_name_plural": "post tags", + }, + ), + migrations.CreateModel( + name="Post", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ("title", models.CharField()), + ("content", markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content")), + ("file", models.FileField(blank=True, null=True, upload_to="posts/")), + ("slug", models.SlugField(allow_unicode=True)), + ( + "author", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="posts", to=settings.AUTH_USER_MODEL + ), + ), + ("tags", models.ManyToManyField(to="blog.posttag")), + ], + options={ + "verbose_name": "post", + "verbose_name_plural": "posts", + }, + ), + ] diff --git a/engine/blog/migrations/0002_alter_post_slug_alter_post_title.py b/engine/blog/migrations/0002_alter_post_slug_alter_post_title.py new file mode 100644 index 00000000..16f7094f --- /dev/null +++ b/engine/blog/migrations/0002_alter_post_slug_alter_post_title.py @@ -0,0 +1,23 @@ +import django_extensions.db.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("blog", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="post", + name="slug", + field=django_extensions.db.fields.AutoSlugField( + allow_unicode=True, blank=True, editable=False, populate_from="title", unique=True + ), + ), + migrations.AlterField( + model_name="post", + name="title", + field=models.CharField(help_text="post title", max_length=128, unique=True, verbose_name="title"), + ), + ] diff --git a/blog/migrations/0003_alter_post_tags.py b/engine/blog/migrations/0003_alter_post_tags.py similarity index 55% rename from blog/migrations/0003_alter_post_tags.py rename to engine/blog/migrations/0003_alter_post_tags.py index 1929216c..9c139274 100644 --- a/blog/migrations/0003_alter_post_tags.py +++ b/engine/blog/migrations/0003_alter_post_tags.py @@ -1,18 +1,15 @@ -# Generated by Django 5.1.8 on 2025-04-28 12:39 - from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ - ('blog', '0002_alter_post_slug_alter_post_title'), + ("blog", "0002_alter_post_slug_alter_post_title"), ] operations = [ migrations.AlterField( - model_name='post', - name='tags', - field=models.ManyToManyField(blank=True, related_name='posts', to='blog.posttag'), + model_name="post", + name="tags", + field=models.ManyToManyField(blank=True, related_name="posts", to="blog.posttag"), ), ] diff --git a/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py b/engine/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py similarity index 76% rename from blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py rename to engine/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py index db64a94c..70a7b48b 100644 --- a/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py +++ b/engine/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-29 13:09 - import markdown_field.fields from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ("blog", "0003_alter_post_tags"), ] @@ -14,128 +11,92 @@ class Migration(migrations.Migration): migrations.AddField( model_name="post", name="content_ar_ar", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_cs_cz", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_da_dk", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_de_de", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_en_gb", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_en_us", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_es_es", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_fr_fr", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_hi_in", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_it_it", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_ja_jp", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_kk_kz", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_nl_nl", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_pl_pl", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_pt_br", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_ro_ro", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_ru_ru", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", name="content_zh_hans", - field=markdown_field.fields.MarkdownField( - blank=True, null=True, verbose_name="content" - ), + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), ), migrations.AddField( model_name="post", diff --git a/engine/blog/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py b/engine/blog/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py new file mode 100644 index 00000000..6dcbc623 --- /dev/null +++ b/engine/blog/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py @@ -0,0 +1,171 @@ +import markdown_field.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("blog", "0004_post_content_ar_ar_post_content_cs_cz_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="post", + name="content_fa_ir", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_he_il", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_hr_hr", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_id_id", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_ko_kr", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_no_no", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_sv_se", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_th_th", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_tr_tr", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="content_vi_vn", + field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"), + ), + migrations.AddField( + model_name="post", + name="title_fa_ir", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_he_il", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_hr_hr", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_id_id", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_ko_kr", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_no_no", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_sv_se", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_th_th", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_tr_tr", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + migrations.AddField( + model_name="post", + name="title_vi_vn", + field=models.CharField( + help_text="post title", + max_length=128, + null=True, + unique=True, + verbose_name="title", + ), + ), + ] diff --git a/engine/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py b/engine/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py new file mode 100644 index 00000000..0631cb59 --- /dev/null +++ b/engine/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py @@ -0,0 +1,155 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("blog", "0005_post_content_fa_ir_post_content_he_il_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="post", + name="meta_description", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ar_ar", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_cs_cz", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_da_dk", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_de_de", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_en_gb", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_en_us", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_es_es", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_fa_ir", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_fr_fr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_he_il", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_hi_in", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_hr_hr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_id_id", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_it_it", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ja_jp", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_kk_kz", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ko_kr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_nl_nl", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_no_no", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_pl_pl", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_pt_br", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ro_ro", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ru_ru", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_sv_se", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_th_th", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_tr_tr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_vi_vn", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_zh_hans", + field=models.CharField(blank=True, max_length=150, null=True), + ), + ] diff --git a/engine/blog/migrations/0007_post_is_static_page.py b/engine/blog/migrations/0007_post_is_static_page.py new file mode 100644 index 00000000..47685dbe --- /dev/null +++ b/engine/blog/migrations/0007_post_is_static_page.py @@ -0,0 +1,19 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("blog", "0006_post_meta_description_post_meta_description_ar_ar_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="post", + name="is_static_page", + field=models.BooleanField( + default=False, + help_text="is this a post for a page with static URL (e.g. `/help/delivery`)?", + verbose_name="is static page", + ), + ), + ] diff --git a/blog/templates/__init__.py b/engine/blog/migrations/__init__.py similarity index 100% rename from blog/templates/__init__.py rename to engine/blog/migrations/__init__.py diff --git a/blog/models.py b/engine/blog/models.py similarity index 66% rename from blog/models.py rename to engine/blog/models.py index 485d3b8f..ec180145 100644 --- a/blog/models.py +++ b/engine/blog/models.py @@ -1,40 +1,26 @@ -from django.db.models import CASCADE, CharField, FileField, ForeignKey, ManyToManyField +from django.conf import settings +from django.db.models import CASCADE, CharField, FileField, ForeignKey, ManyToManyField, BooleanField from django.utils.translation import gettext_lazy as _ from django_extensions.db.fields import AutoSlugField from markdown.extensions.toc import TocExtension from markdown_field import MarkdownField -from core.abstract import NiceModel +from engine.core.abstract import NiceModel -class Post(NiceModel): - """ - Represents a blog post model extending NiceModel. - - The Post class defines the structure and behavior of a blog post. It includes - attributes for author, title, content, optional file attachment, slug, - and associated tags. The class enforces constraints such as requiring either - content or a file attachment but not both simultaneously. It also supports - automatic slug generation based on the title. This model can be used in - a blogging platform to manage posts created by users. - - Attributes: - is_publicly_visible (bool): Specifies whether the post is visible to the public. - author (ForeignKey): A reference to the user who authored the post. - title (CharField): The title of the post, must be unique and non-empty. - content (MarkdownField): The content of the post written in markdown format. - file (FileField): An optional file attachment for the post. - slug (AutoSlugField): A unique, automatically generated slug based on the title. - tags (ManyToManyField): Tags associated with the post for categorization. - - """ +class Post(NiceModel): # type: ignore [django-manager-missing] + __doc__ = _( # type: ignore [assignment] + "Represents a blog post model. " + "The Post class defines the structure and behavior of a blog post. " + "It includes attributes for author, title, content, optional file attachment, slug, and associated tags. " + "The class enforces constraints such as requiring either content or a file attachment but not both simultaneously. " + "It also supports automatic slug generation based on the title." + ) is_publicly_visible = True - author: ForeignKey = ForeignKey( - to="vibes_auth.User", on_delete=CASCADE, blank=False, null=False, related_name="posts" - ) - title: CharField = CharField( + author = ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=CASCADE, blank=False, null=False, related_name="posts") + title = CharField( unique=True, max_length=128, blank=False, null=False, help_text=_("post title"), verbose_name=_("title") ) content: MarkdownField = MarkdownField( @@ -74,9 +60,15 @@ class Post(NiceModel): blank=True, null=True, ) - file: FileField = FileField(upload_to="posts/", blank=True, null=True) - slug: AutoSlugField = AutoSlugField(populate_from="title", allow_unicode=True, unique=True, editable=False) - tags: ManyToManyField = ManyToManyField(to="blog.PostTag", blank=True, related_name="posts") + file = FileField(upload_to="posts/", blank=True, null=True) + slug = AutoSlugField(populate_from="title", allow_unicode=True, unique=True, editable=False) + tags = ManyToManyField(to="blog.PostTag", blank=True, related_name="posts") + meta_description = CharField(max_length=150, blank=True, null=True) + is_static_page = BooleanField( + default=False, + verbose_name=_("is static page"), + help_text=_("is this a post for a page with static URL (e.g. `/help/delivery`)?"), + ) def __str__(self): return f"{self.title} | {self.author.first_name} {self.author.last_name}" @@ -104,9 +96,9 @@ class PostTag(NiceModel): Attributes: is_publicly_visible (bool): Determines if the tag is visible publicly. - tag_name (CharField): An internal tag identifier for the post tag. It is a required + tag_name (CharField): An internal tag identifier for the post's tag. It is a required field with a maximum length of 255 characters. - name (CharField): A user-friendly, unique display name for the post tag + name (CharField): A user-friendly, unique display name for the post's tag with a maximum length of 255 characters. Meta: @@ -115,15 +107,16 @@ class PostTag(NiceModel): """ is_publicly_visible = True + posts: "Post" - tag_name: CharField = CharField( + tag_name = CharField( blank=False, null=False, max_length=255, help_text=_("internal tag identifier for the post tag"), verbose_name=_("tag name"), ) - name: CharField = CharField( + name = CharField( max_length=255, help_text=_("user-friendly name for the post tag"), verbose_name=_("tag display name"), diff --git a/blog/serializers.py b/engine/blog/serializers.py similarity index 91% rename from blog/serializers.py rename to engine/blog/serializers.py index bf681a6c..57279ac1 100644 --- a/blog/serializers.py +++ b/engine/blog/serializers.py @@ -1,7 +1,7 @@ from rest_framework.fields import SerializerMethodField from rest_framework.serializers import ModelSerializer -from blog.models import Post, PostTag +from engine.blog.models import Post, PostTag class PostTagSerializer(ModelSerializer): diff --git a/blog/signals.py b/engine/blog/signals.py similarity index 100% rename from blog/signals.py rename to engine/blog/signals.py diff --git a/blog/static/.gitkeep b/engine/blog/static/.gitkeep similarity index 100% rename from blog/static/.gitkeep rename to engine/blog/static/.gitkeep diff --git a/blog/utils/__init__.py b/engine/blog/templates/__init__.py similarity index 100% rename from blog/utils/__init__.py rename to engine/blog/templates/__init__.py diff --git a/engine/blog/tests/test_drf.py b/engine/blog/tests/test_drf.py new file mode 100644 index 00000000..3fd85c2e --- /dev/null +++ b/engine/blog/tests/test_drf.py @@ -0,0 +1,8 @@ +from django.test import TestCase +from rest_framework.test import APIClient + + +class DRFBlogViewsTests(TestCase): + def setUp(self): + super().setUp() + self.client = APIClient() diff --git a/engine/blog/tests/test_graphene.py b/engine/blog/tests/test_graphene.py new file mode 100644 index 00000000..d5a7ae72 --- /dev/null +++ b/engine/blog/tests/test_graphene.py @@ -0,0 +1,15 @@ +from typing import Any + +from django.test import TestCase +from django.urls import reverse + + +class GraphQLBlogTests(TestCase): + def graphql(self, query: str, variables: dict | None = None): + url = reverse("graphql-platform") + payload: dict[str, Any] = {"query": query} + if variables: + payload["variables"] = variables + response = self.client.post(url, data=payload, content_type="application/json") + self.assertEqual(response.status_code, 200, response.json()) + return response.json() diff --git a/blog/translation.py b/engine/blog/translation.py similarity index 64% rename from blog/translation.py rename to engine/blog/translation.py index 58f7ac02..c86129f7 100644 --- a/blog/translation.py +++ b/engine/blog/translation.py @@ -1,9 +1,9 @@ from modeltranslation.decorators import register from modeltranslation.translator import TranslationOptions -from blog.models import Post +from engine.blog.models import Post @register(Post) class PostOptions(TranslationOptions): - fields = ("title", "content") + fields = ("title", "content", "meta_description") diff --git a/engine/blog/urls.py b/engine/blog/urls.py new file mode 100644 index 00000000..730810e3 --- /dev/null +++ b/engine/blog/urls.py @@ -0,0 +1,13 @@ +from django.urls import include, path +from rest_framework.routers import DefaultRouter + +from engine.blog.viewsets import PostViewSet + +app_name = "blog" + +blog_router = DefaultRouter() +blog_router.register(prefix=r"posts", viewset=PostViewSet, basename="posts") + +urlpatterns = [ + path(r"", include(blog_router.urls)), +] diff --git a/core/__init__.py b/engine/blog/utils/__init__.py similarity index 100% rename from core/__init__.py rename to engine/blog/utils/__init__.py diff --git a/engine/blog/views.py b/engine/blog/views.py new file mode 100644 index 00000000..eea436a3 --- /dev/null +++ b/engine/blog/views.py @@ -0,0 +1,3 @@ +import logging + +logger = logging.getLogger(__name__) diff --git a/engine/blog/viewsets.py b/engine/blog/viewsets.py new file mode 100644 index 00000000..76a3a76d --- /dev/null +++ b/engine/blog/viewsets.py @@ -0,0 +1,27 @@ +from django.utils.translation import gettext_lazy as _ +from django_filters.rest_framework import DjangoFilterBackend +from drf_spectacular.utils import extend_schema_view +from rest_framework.viewsets import ReadOnlyModelViewSet + +from engine.blog.filters import PostFilter +from engine.blog.models import Post +from engine.blog.serializers import PostSerializer +from engine.blog.docs.drf.viewsets import POST_SCHEMA +from engine.core.permissions import EvibesPermission + + +@extend_schema_view(**POST_SCHEMA) +class PostViewSet(ReadOnlyModelViewSet): # type: ignore [type-arg] + __doc__ = _( # type: ignore [assignment] + "Encapsulates operations for managing and retrieving Post entities in a read-only model view set. " + "This class is tailored to handle Post objects that are active and allows filtration based on defined " + "filters. It integrates with Django's backend filtering system and ensures operations align with the " + "defined permissions. The view set also includes an additional 'retrieve' permission configuration." + ) + + serializer_class = PostSerializer + permission_classes = (EvibesPermission,) + queryset = Post.objects.filter(is_active=True) + filter_backends = [DjangoFilterBackend] + filterset_class = PostFilter + additional = {"retrieve": "ALLOW"} diff --git a/blog/widgets.py b/engine/blog/widgets.py similarity index 83% rename from blog/widgets.py rename to engine/blog/widgets.py index f312b9a7..ae5d640b 100644 --- a/blog/widgets.py +++ b/engine/blog/widgets.py @@ -1,4 +1,7 @@ +from typing import Any + from django import forms +from django.forms.renderers import BaseRenderer from django.utils.safestring import mark_safe @@ -7,7 +10,10 @@ class MarkdownEditorWidget(forms.Textarea): css = {"all": ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.css",)} js = ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.js",) - def render(self, name, value, attrs=None, renderer=None): + def render(self, name: str, value: str, attrs: dict[Any, Any] | None = None, renderer: BaseRenderer | None = None): + if not attrs: + attrs = {} + attrs["class"] = "markdown-editor" textarea_html = super().render(name, value, attrs, renderer) textarea_id = attrs.get("id", f"id_{name}") init_js = f""" diff --git a/core/docs/__init__.py b/engine/core/__init__.py similarity index 100% rename from core/docs/__init__.py rename to engine/core/__init__.py diff --git a/engine/core/abstract.py b/engine/core/abstract.py new file mode 100644 index 00000000..a3c11847 --- /dev/null +++ b/engine/core/abstract.py @@ -0,0 +1,42 @@ +import uuid +from typing import Collection + +from django.db.models import BooleanField, Model, UUIDField +from django.utils.translation import gettext_lazy as _ +from django_extensions.db.fields import CreationDateTimeField, ModificationDateTimeField + + +class NiceModel(Model): + id: None = None + uuid = UUIDField( + verbose_name=_("unique id"), + help_text=_("unique id is used to surely identify any database object"), + primary_key=True, + default=uuid.uuid4, + editable=False, + ) + is_active = BooleanField( + default=True, + verbose_name=_("is active"), + help_text=_("if set to false, this object can't be seen by users without needed permission"), + ) + created = CreationDateTimeField(_("created"), help_text=_("when the object first appeared on the database")) # type: ignore [no-untyped-call] + modified = ModificationDateTimeField(_("modified"), help_text=_("when the object was last modified")) # type: ignore [no-untyped-call] + + def save( # type: ignore [override] + self, + *, + force_insert: bool = False, + force_update: bool = False, + using: str | None = None, + update_fields: Collection[str] | None = None, + update_modified: bool = True, + ) -> None: + self.update_modified = update_modified + return super().save( + force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields + ) + + class Meta: + abstract = True + get_latest_by = "modified" diff --git a/engine/core/admin.py b/engine/core/admin.py new file mode 100644 index 00000000..92e9c944 --- /dev/null +++ b/engine/core/admin.py @@ -0,0 +1,1052 @@ +from contextlib import suppress +from typing import Any, ClassVar, Type + +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 register, site +from django.contrib.gis.admin import GISModelAdmin +from django.contrib.messages import constants as messages +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 ( + Address, + Attribute, + AttributeGroup, + AttributeValue, + Brand, + Category, + CategoryTag, + CustomerRelationshipManagementProvider, + Feedback, + Order, + OrderCrmLink, + OrderProduct, + Product, + ProductImage, + ProductTag, + PromoCode, + Promotion, + Stock, + Vendor, + Wishlist, +) + + +class FieldsetsMixin: + general_fields: list[str] | None = [] + relation_fields: list[str] | None = [] + additional_fields: list[str] | None = [] + model: ClassVar[Type[Model]] + + def get_fieldsets(self, request: HttpRequest, obj: Any = None) -> list[tuple[str, dict[str, list[str]]]]: + if request: + pass + + if obj: + pass + + fieldsets = [] + + def add_translations_fieldset( + fss: list[tuple[str, dict[str, list[str]]]], + ) -> list[tuple[str, dict[str, list[str]]]]: + with suppress(NotRegistered): + transoptions = translator.get_options_for_model(self.model) + translation_fields = [] + for orig in transoptions.local_fields: + translation_fields += get_translation_fields(orig) + if translation_fields: + fss = list(fss) + [(_("translations"), {"classes": ["tab"], "fields": translation_fields})] # type: ignore [list-item] + return fss + + if self.general_fields: + fieldsets.append((_("general"), {"classes": ["tab"], "fields": self.general_fields})) + if self.relation_fields: + fieldsets.append((_("relations"), {"classes": ["tab"], "fields": self.relation_fields})) + if self.additional_fields: + fieldsets.append((_("additional info"), {"classes": ["tab"], "fields": self.additional_fields})) + opts = self.model._meta + + meta_fields = [] + + if any(f.name == "uuid" for f in opts.fields): + meta_fields.append("uuid") + + if any(f.name == "slug" for f in opts.fields): + meta_fields.append("slug") + + if any(f.name == "sku" for f in opts.fields): + meta_fields.append("sku") + + if any(f.name == "human_readable_id" for f in opts.fields): + meta_fields.append("human_readable_id") + + if 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"), {"classes": ["tab"], "fields": ts})) + fieldsets = add_translations_fieldset(fieldsets) # type: ignore [arg-type, assignment] + return fieldsets # type: ignore [return-value] + + +# noinspection PyUnresolvedReferences +class ActivationActionsMixin: + actions_on_top = True + actions_on_bottom = True + actions = [ + "delete_selected", + "activate_selected", + "deactivate_selected", + ] + + @action(description=_("activate selected %(verbose_name_plural)s").lower(), permissions=["change"]) + def activate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None: + try: + queryset.update(is_active=True) + self.message_user( # type: ignore [attr-defined] + request=request, message=_("selected items have been activated.").lower(), level=messages.SUCCESS + ) + + except Exception as e: + self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined] + + @action(description=_("deactivate selected %(verbose_name_plural)s").lower(), permissions=["change"]) + def deactivate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None: + try: + queryset.update(is_active=False) + self.message_user( # type: ignore [attr-defined] + request=request, message=_("selected items have been deactivated.").lower(), level=messages.SUCCESS + ) + + except Exception as e: + self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined] + + +class AttributeValueInline(TabularInline): # type: ignore [type-arg] + model = AttributeValue + extra = 0 + autocomplete_fields = ["attribute"] + verbose_name = _("attribute value") + verbose_name_plural = _("attribute values") + tab = True + + def get_queryset(self, request): + return super().get_queryset(request).select_related("attribute", "product") + + +class ProductImageInline(TabularInline): # type: ignore [type-arg] + model = ProductImage + extra = 0 + tab = True + verbose_name = _("image") + verbose_name_plural = _("images") + + def get_queryset(self, request): + return super().get_queryset(request).select_related("product") + + +class StockInline(TabularInline): # type: ignore [type-arg] + model = Stock + extra = 0 + form = StockForm + tab = True + verbose_name = _("stock") + verbose_name_plural = _("stocks") + + def get_queryset(self, request): + return super().get_queryset(request).select_related("vendor", "product") + + +class OrderProductInline(TabularInline): # type: ignore [type-arg] + model = OrderProduct + extra = 0 + readonly_fields = ("product", "quantity", "buy_price") + form = OrderProductForm + verbose_name = _("order product") + verbose_name_plural = _("order products") + tab = True + + def get_queryset(self, request): + return super().get_queryset(request).select_related("product").only("product__name") + + +class CategoryChildrenInline(TabularInline): # type: ignore [type-arg] + model = Category + fk_name = "parent" + extra = 0 + fields = ("name", "description", "is_active", "image", "markup_percent") + tab = True + verbose_name = _("children") + verbose_name_plural = _("children") + + +@register(AttributeGroup) +class AttributeGroupAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = AttributeGroup # type: ignore [misc] + list_display = ( + "name", + "modified", + ) + search_fields = ( + "uuid", + "name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "name", + "parent", + ] + + +@register(Attribute) +class AttributeAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Attribute # type: ignore [misc] + list_display = ( + "name", + "group", + "value_type", + "modified", + ) + list_filter = ( + "value_type", + "group", + "is_active", + ) + search_fields = ( + "uuid", + "name", + "group__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = [ + "group", + ] + general_fields = [ + "is_active", + "name", + "value_type", + "is_filterable", + ] + relation_fields = [ + "group", + ] + + +@register(AttributeValue) +class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = AttributeValue # type: ignore [misc] + list_display = ( + "attribute", + "value", + "modified", + ) + list_filter = ( + "attribute__group", + "is_active", + ) + search_fields = ( + "uuid", + "value", + "attribute__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = [ + "attribute", + ] + general_fields = [ + "is_active", + "value", + ] + relation_fields = [ + "attribute", + "product", + ] + + +@register(Category) +class CategoryAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, DraggableMPTTAdmin, ModelAdmin): + # noinspection PyClassVar + model = Category + list_display = ( + "indented_title", + "parent", + "is_active", + "modified", + ) + # noinspection PyUnresolvedReferences + list_filter = ( + "is_active", + "level", + "created", + "modified", + ) + search_fields = ( + "uuid", + "name", + ) + inlines = [ + CategoryChildrenInline, + ] + autocomplete_fields = [ + "parent", + "tags", + ] + readonly_fields = ( + "slug", + "uuid", + "modified", + "created", + ) + + general_fields = [ + "is_active", + "name", + "description", + "image", + "markup_percent", + "priority", + ] + relation_fields = [ + "parent", + "tags", + ] + + +@register(Brand) +class BrandAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Brand # type: ignore [misc] + list_display = ( + "name", + "priority", + "is_active", + ) + list_filter = ( + "categories", + "is_active", + ) + search_fields = ( + "uuid", + "name", + ) + readonly_fields = ( + "uuid", + "slug", + "modified", + "created", + ) + general_fields = [ + "is_active", + "name", + "description", + "priority", + ] + additional_fields = ["small_logo", "big_logo"] + + +@register(Product) +class ProductAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin, ImportExportModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Product # type: ignore [misc] + list_display = ( + "sku", + "name", + "is_active", + "category", + "brand", + "price", + "rating", + "modified", + ) + list_filter = ( + "is_active", + "is_digital", + "stocks__vendor", + "tags__name", + "created", + "modified", + ) + search_fields = ( + "name", + "partnumber", + "brand__name", + "brand__slug", + "category__name", + "category__slug", + "uuid", + "slug", + "sku", + ) + readonly_fields = ( + "sku", + "slug", + "uuid", + "modified", + "created", + ) + autocomplete_fields = ( + "category", + "brand", + "tags", + ) + inlines = [ + AttributeValueInline, + ProductImageInline, + StockInline, + ] + import_form_class = ImportForm + export_form_class = ExportForm + + general_fields = [ + "is_active", + "name", + "partnumber", + "is_digital", + ] + relation_fields = [ + "category", + "brand", + "tags", + ] + + def get_queryset(self, request): + return ( + super() + .get_queryset(request) + .select_related("category", "brand") + .prefetch_related( + "tags", + "images", + "stocks__vendor", + "attributes__attribute", + ) + ) + + +@register(ProductTag) +class ProductTagAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = ProductTag # type: ignore [misc] + list_display = ("tag_name",) + search_fields = ("tag_name",) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "tag_name", + "name", + ] + + +@register(CategoryTag) +class CategoryTagAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = CategoryTag # type: ignore [misc] + list_display = ( + "name", + "tag_name", + "is_active", + ) + search_fields = ( + "name", + "tag_name", + "is_active", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "tag_name", + "name", + ] + + +@register(Vendor) +class VendorAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Vendor # type: ignore [misc] + list_display = ( + "name", + "markup_percent", + "modified", + ) + list_filter = ( + "markup_percent", + "is_active", + ) + search_fields = ( + "name", + "uuid", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + "last_processing_response", + ) + form = VendorForm + general_fields = [ + "is_active", + "name", + "markup_percent", + "authentication", + ] + relation_fields = [ + "users", + ] + additional_fields = [ + "integration_path", + "last_processing_response", + "b2b_auth_token", + ] + + +@register(Feedback) +class FeedbackAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Feedback # type: ignore [misc] + list_display = ( + "order_product", + "rating", + "comment", + "modified", + ) + list_filter = ( + "rating", + "is_active", + ) + search_fields = ( + "order_product__product__name", + "comment", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "rating", + "comment", + ] + relation_fields = [ + "order_product", + ] + + +@register(Order) +class OrderAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Order # type: ignore [misc] + list_display = ( + "human_readable_id", + "user", + "status", + "total_price", + "buy_time", + "modified", + ) + list_filter = ( + "status", + "buy_time", + "modified", + "created", + ) + search_fields = ( + "user__email", + "status", + "uuid", + "human_readable_id", + ) + readonly_fields = ( + "total_price", + "total_quantity", + "human_readable_id", + "uuid", + "modified", + "created", + ) + inlines = [ + OrderProductInline, + ] + form = OrderForm + general_fields = [ + "is_active", + "user", + "status", + "notifications", + "attributes", + "buy_time", + ] + relation_fields = [ + "promo_code", + "billing_address", + "shipping_address", + ] + + +@register(OrderProduct) +class OrderProductAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = OrderProduct # type: ignore [misc] + list_display = ( + "order", + "product", + "quantity", + "buy_price", + "status", + "modified", + ) + list_filter = ( + "status", + "modified", + ) + search_fields = ( + "order__user__email", + "product__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + form = OrderProductForm + general_fields = [ + "is_active", + "quantity", + "buy_price", + "status", + ] + relation_fields = [ + "order", + "product", + ] + + +@register(PromoCode) +class PromoCodeAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = PromoCode # type: ignore [misc] + list_display = ( + "code", + "discount_percent", + "discount_amount", + "start_time", + "end_time", + "used_on", + ) + list_filter = ( + "discount_percent", + "discount_amount", + "start_time", + "end_time", + ) + search_fields = ( + "code", + "uuid", + "user__email", + ) + readonly_fields = ( + "used_on", + "uuid", + "modified", + "created", + ) + autocomplete_fields = ("user",) + general_fields = [ + "is_active", + "code", + "discount_amount", + "discount_percent", + "start_time", + "end_time", + "used_on", + ] + relation_fields = [ + "user", + ] + + +@register(Promotion) +class PromotionAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Promotion # type: ignore [misc] + list_display = ( + "name", + "discount_percent", + "modified", + ) + search_fields = ("name",) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = ("products",) + general_fields = [ + "is_active", + "name", + "discount_percent", + "description", + ] + relation_fields = [ + "products", + ] + + +@register(Stock) +class StockAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Stock # type: ignore [misc] + form = StockForm + list_display = ( + "product", + "vendor", + "sku", + "quantity", + "price", + "modified", + ) + list_filter = ( + "vendor", + "quantity", + ) + search_fields = ( + "product__name", + "vendor__name", + "sku", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = ( + "product", + "vendor", + ) + general_fields = [ + "is_active", + "sku", + "quantity", + "price", + "purchase_price", + "digital_asset", + ] + additional_fields = [ + "system_attributes", + ] + relation_fields = [ + "product", + "vendor", + ] + + +@register(Wishlist) +class WishlistAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = Wishlist # type: ignore [misc] + list_display = ( + "user", + "modified", + ) + search_fields = ( + "user__email", + "uuid", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "user", + ] + relation_fields = [ + "products", + ] + + +@register(ProductImage) +class ProductImageAdmin(DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = ProductImage # type: ignore [misc] + list_display = ( + "alt", + "product", + "priority", + "modified", + ) + list_filter = ( + "priority", + "modified", + "created", + ) + search_fields = ( + "alt", + "product__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = ("product",) + general_fields = [ + "is_active", + "alt", + "priority", + "image", + ] + relation_fields = [ + "product", + ] + + +@register(Address) +class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin): # type: ignore [misc] + # noinspection PyClassVar + model = Address # type: ignore [misc] + list_display = ( + "street", + "city", + "region", + "country", + "user", + ) + list_filter = ( + "country", + "region", + ) + search_fields = ( + "street", + "city", + "postal_code", + "user__email", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + gis_widget_kwargs = { + "attrs": { + "default_lon": 37.61556, + "default_lat": 55.75222, + "default_zoom": 6, + } + } + general_fields = [ + "is_active", + "address_line", + "street", + "district", + "city", + "region", + "postal_code", + "country", + "raw_data", + ] + relation_fields = [ + "user", + "api_response", + ] + + +@register(CustomerRelationshipManagementProvider) +class CustomerRelationshipManagementProviderAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = CustomerRelationshipManagementProvider # type: ignore [misc] + list_display = ( + "name", + "default", + ) + search_fields = ( + "name", + "uuid", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + form = CRMForm + general_fields = [ + "is_active", + "name", + "default", + "integration_url", + "integration_location", + "attributes", + "authentication", + ] + + +@register(OrderCrmLink) +class OrderCrmLinkAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] + # noinspection PyClassVar + model = OrderCrmLink # type: ignore [misc] + list_display = ( + "crm_lead_id", + "order", + ) + search_fields = ( + "crm_lead_id", + "order__human_readable_id", + "order__uuid", + "order__user__uuid", + "order__user__email", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + "crm_lead_id", + ) + general_fields = [ + "is_active", + "crm_lead_id", + ] + relation_fields = [ + "order", + "crm", + ] + + +# Constance configuration +class ConstanceConfig: + class Meta: + app_label = "core" + object_name = "Config" + concrete_model = None + model_name = module_name = "config" + verbose_name_plural = _("Config") + abstract = False + swapped = False + is_composite_pk = False + + def get_change_permission(self) -> str: + return f"change_{self.model_name}" + + @property + def app_config(self) -> AppConfig: + return apps.get_app_config(self.app_label) + + @property + def label(self) -> str: + return f"{self.app_label}.{self.object_name}" + + @property + def label_lower(self) -> str: + return f"{self.app_label}.{self.model_name}" + + def get_ordered_objects(self) -> bool: + return False + + _meta = Meta() + + +# noinspection PyTypeChecker +site.unregister([Config]) +# noinspection PyTypeChecker +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/core/apps.py b/engine/core/apps.py similarity index 67% rename from core/apps.py rename to engine/core/apps.py index 3cd3db0a..f8e2e0a3 100644 --- a/core/apps.py +++ b/engine/core/apps.py @@ -4,13 +4,13 @@ from django.utils.translation import gettext_lazy as _ class CoreConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "core" + name = "engine.core" verbose_name = _("core") icon = "fa fa-solid fa-star" priority = 88 hide = False # noinspection PyUnresolvedReferences - def ready(self): - import core.elasticsearch.documents - import core.signals # noqa: F401 + def ready(self) -> None: + import engine.core.elasticsearch.documents + import engine.core.signals # noqa: F401 diff --git a/core/b2b_urls.py b/engine/core/b2b_urls.py similarity index 89% rename from core/b2b_urls.py rename to engine/core/b2b_urls.py index 53a4f04c..658af948 100644 --- a/core/b2b_urls.py +++ b/engine/core/b2b_urls.py @@ -1,6 +1,6 @@ from django.urls import path -from core.views import ( +from engine.core.views import ( BuyAsBusinessView, GlobalSearchView, ) diff --git a/core/choices.py b/engine/core/choices.py similarity index 100% rename from core/choices.py rename to engine/core/choices.py diff --git a/engine/core/crm/__init__.py b/engine/core/crm/__init__.py new file mode 100644 index 00000000..c5fa112c --- /dev/null +++ b/engine/core/crm/__init__.py @@ -0,0 +1,5 @@ +from engine.core.models import CustomerRelationshipManagementProvider + + +def any_crm_integrations() -> bool: + return CustomerRelationshipManagementProvider.objects.exists() diff --git a/core/management/__init__.py b/engine/core/crm/amo/__init__.py similarity index 100% rename from core/management/__init__.py rename to engine/core/crm/amo/__init__.py diff --git a/engine/core/crm/amo/gateway.py b/engine/core/crm/amo/gateway.py new file mode 100644 index 00000000..02ad2fe9 --- /dev/null +++ b/engine/core/crm/amo/gateway.py @@ -0,0 +1,195 @@ +import logging + +import requests +from django.conf import settings +from django.core.cache import cache +from django.db import transaction + +from engine.core.crm.exceptions import CRMException +from engine.core.models import CustomerRelationshipManagementProvider, Order, OrderCrmLink +from engine.core.utils import is_status_code_success + +logger = logging.getLogger(__name__) + + +class AmoCRM: + STATUS_MAP: dict[str, str] = {} + + def __init__(self): + try: + self.instance = CustomerRelationshipManagementProvider.objects.get(name="AmoCRM") + except CustomerRelationshipManagementProvider.DoesNotExist as dne: + logger.warning("AMO CRM provider not found") + raise CRMException("AMO CRM provider not found") from dne + except CustomerRelationshipManagementProvider.MultipleObjectsReturned as mre: + logger.warning("Multiple AMO CRM providers found") + raise CRMException("Multiple AMO CRM providers found") from mre + + self.base = f"{self.instance.integration_url}" + + self.client_id = self.instance.authentication.get("client_id") + self.client_secret = self.instance.authentication.get("client_secret") + self.authorization_code = self.instance.authentication.get("authorization_code") + self.refresh_token = cache.get("amo_refresh_token") + + self.responsible_user_id = self.instance.attributes.get("responsible_user_id") + + self.fns_api_key = self.instance.attributes.get("fns_api_key") + + if not all( + [ + self.base, + self.client_id, + self.client_secret, + self.authorization_code, + self.fns_api_key, + ] + ): + raise CRMException("AMO CRM provider not configured") + + def _token(self) -> str: + payload = { + "client_id": self.client_id, + "client_secret": self.client_secret, + "redirect_uri": f"https://api.{settings.BASE_DOMAIN}/", + } + if self.refresh_token: + payload["grant_type"] = "refresh_token" + payload["refresh_token"] = self.refresh_token + else: + payload["grant_type"] = "authorization_code" + payload["code"] = self.authorization_code + r = requests.post(f"{self.base}/oauth2/access_token", json=payload, timeout=15) + if not is_status_code_success(r.status_code): + logger.error("Unable to get AMO access token: %s %s", r.status_code, r.text) + raise CRMException("Unable to get AMO access token") + data = r.json() + self.access_token = data["access_token"] + cache.set("amo_refresh_token", data["refresh_token"], 604800) + self.refresh_token = data["refresh_token"] + return self.access_token + + def _headers(self) -> dict: + return {"Authorization": f"Bearer {self._token()}", "Content-Type": "application/json"} + + def _build_lead_payload(self, order: Order) -> dict: + name = f"Заказ #{order.human_readable_id}" + price = int(round(order.total_price)) + payload: dict = {"name": name, "price": price} + contact_id = self._create_contact(order) + if contact_id: + payload["_embedded"] = {"contacts": [{"id": contact_id}]} + if self.responsible_user_id: + payload["responsible_user_id"] = self.responsible_user_id + return payload + + def _get_customer_name(self, order: Order) -> str: + if type(order.attributes) is not dict: + raise ValueError("order.attributes must be a dict") + + if order.user: + if type(order.user.attributes) is not dict: + order.user.attributes = {} + order.user.save() + + if not order.business_identificator: + return ( + order.user.get_full_name() + if order.user + else None + or ( + f"{order.attributes.get('customer_name')} | " + f"{order.attributes.get('customer_phone_number') or order.attributes.get('customer_email')}" + ) + ) + try: + r = requests.get( + f"https://api-fns.ru/api/egr?req={order.business_identificator}&key={self.fns_api_key}", timeout=15 + ) + r.raise_for_status() + body = r.json() + except requests.exceptions.RequestException as rex: + logger.error("Unable to get company info with FNS: %s", rex, exc_info=True) + return "" + + ul = body.get("ЮЛ") + ip = body.get("ИП") + + if ul and not ip: + return f"{ul.get('НаимСокрЮЛ')} | {order.business_identificator}" + if ip and not ul: + return f"ИП {ip.get('ФИОПолн')} | {order.business_identificator}" + + return "" + + def _create_contact(self, order: Order) -> int | None: + try: + customer_name = self._get_customer_name(order) + + if customer_name: + r = requests.get( + f"{self.base}/api/v4/contacts", + headers=self._headers().update({"filter[name]": customer_name, "limit": 1}), + timeout=15, + ) + if r.status_code == 200: + body = r.json() + return body.get("_embedded", {}).get("contacts", [{}])[0].get("id", None) + create_contact_payload = {"name": customer_name} + + if self.responsible_user_id: + create_contact_payload["responsible_user_id"] = self.responsible_user_id + + if order.user: + create_contact_payload["first_name"] = order.user.first_name or "" + create_contact_payload["last_name"] = order.user.last_name or "" + + r = requests.post( + f"{self.base}/api/v4/contacts", json={"name": customer_name}, headers=self._headers(), timeout=15 + ) + + if r.status_code == 200: + body = r.json() + return body.get("_embedded", {}).get("contacts", [{}])[0].get("id", None) + + return None + + else: + return None + + except requests.exceptions.RequestException as rex: + logger.error("Unable to create a company in AmoCRM: %s", rex, exc_info=True) + raise CRMException("Unable to create a company in AmoCRM") from rex + + def process_order_changes(self, order: Order) -> str: + with transaction.atomic(): + try: + link: OrderCrmLink | None = OrderCrmLink.objects.get(order=order) + except OrderCrmLink.MultipleObjectsReturned: + link = OrderCrmLink.objects.filter(order=order).first() + except OrderCrmLink.DoesNotExist: + link = None + if link: + lead_id = link.crm_lead_id + payload = self._build_lead_payload(order) + r = requests.patch( + f"{self.base}/api/v4/leads/{lead_id}", json=payload, headers=self._headers(), timeout=15 + ) + if r.status_code not in (200, 204): + r.raise_for_status() + return lead_id + payload = self._build_lead_payload(order) + r = requests.post(f"{self.base}/api/v4/leads", json=[payload], headers=self._headers(), timeout=15) + r.raise_for_status() + body = r.json() + lead_id = str(body["_embedded"]["leads"][0]["id"]) + OrderCrmLink.objects.create(order=order, crm_lead_id=lead_id, crm=self.instance) + return lead_id + + def update_order_status(self, crm_lead_id: str, new_status: str) -> None: + link = OrderCrmLink.objects.get(crm_lead_id=crm_lead_id) + + if link.order.status == new_status: + return + link.order.status = self.STATUS_MAP[new_status] + link.order.save(update_fields=["status"]) diff --git a/engine/core/crm/exceptions.py b/engine/core/crm/exceptions.py new file mode 100644 index 00000000..8ade09c6 --- /dev/null +++ b/engine/core/crm/exceptions.py @@ -0,0 +1,2 @@ +class CRMException(Exception): + pass diff --git a/core/data/.gitkeep b/engine/core/data/.gitkeep similarity index 100% rename from core/data/.gitkeep rename to engine/core/data/.gitkeep diff --git a/core/data/payment_methods.json b/engine/core/data/payment_methods.json similarity index 100% rename from core/data/payment_methods.json rename to engine/core/data/payment_methods.json diff --git a/core/migrations/__init__.py b/engine/core/docs/__init__.py similarity index 100% rename from core/migrations/__init__.py rename to engine/core/docs/__init__.py diff --git a/core/docs/drf/__init__.py b/engine/core/docs/drf/__init__.py similarity index 100% rename from core/docs/drf/__init__.py rename to engine/core/docs/drf/__init__.py diff --git a/core/docs/drf/views.py b/engine/core/docs/drf/views.py similarity index 57% rename from core/docs/drf/views.py rename to engine/core/docs/drf/views.py index 06bc43d6..e1b192c7 100644 --- a/core/docs/drf/views.py +++ b/engine/core/docs/drf/views.py @@ -1,19 +1,46 @@ +from django.conf import settings +from django.http import FileResponse from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import OpenApiParameter, extend_schema, inline_serializer from rest_framework import status from rest_framework.fields import CharField, DictField, JSONField, ListField -from core.docs.drf import error -from core.serializers import ( +from engine.core.docs.drf import error +from engine.core.serializers import ( BuyAsBusinessOrderSerializer, CacheOperatorSerializer, ContactUsSerializer, LanguageSerializer, ) -from payments.serializers import TransactionProcessSerializer +from engine.payments.serializers import TransactionProcessSerializer + + +CUSTOM_OPENAPI_SCHEMA = { + "get": extend_schema( + tags=[ + "misc", + ], + parameters=[ + OpenApiParameter( + name="lang", + type=str, + location="query", + enum=list(dict(settings.LANGUAGES).keys()), + ), + ], + summary=_("OpenAPI schema in selected format with selected language"), + description=_( + "OpenApi3 schema for this API. Format can be selected via content negotiation. " + "Language can be selected with Accept-Language and query parameter both." + ), + ) +} CACHE_SCHEMA = { "post": extend_schema( + tags=[ + "misc", + ], summary=_("cache I/O"), description=_( "apply only a key to read permitted data from cache.\n" @@ -29,6 +56,9 @@ CACHE_SCHEMA = { LANGUAGE_SCHEMA = { "get": extend_schema( + tags=[ + "misc", + ], summary=_("get a list of supported languages"), responses={ status.HTTP_200_OK: LanguageSerializer(many=True), @@ -38,6 +68,9 @@ LANGUAGE_SCHEMA = { PARAMETERS_SCHEMA = { "get": extend_schema( + tags=[ + "misc", + ], summary=_("get application's exposable parameters"), responses={status.HTTP_200_OK: inline_serializer("parameters", fields={"key": CharField(default="value")})}, ) @@ -45,6 +78,9 @@ PARAMETERS_SCHEMA = { CONTACT_US_SCHEMA = { "post": extend_schema( + tags=[ + "misc", + ], summary=_("send a message to the support team"), request=ContactUsSerializer, responses={ @@ -56,6 +92,9 @@ CONTACT_US_SCHEMA = { REQUEST_CURSED_URL_SCHEMA = { "post": extend_schema( + tags=[ + "misc", + ], summary=_("request a CORSed URL"), request=inline_serializer("url", fields={"url": CharField(default="https://example.org")}), responses={ @@ -67,6 +106,10 @@ REQUEST_CURSED_URL_SCHEMA = { SEARCH_SCHEMA = { "get": extend_schema( + tags=[ + "misc", + ], + summary=_("Search between products, categories and brands"), parameters=[ OpenApiParameter( name="q", @@ -76,11 +119,13 @@ SEARCH_SCHEMA = { ) ], responses={ - 200: inline_serializer( + status.HTTP_200_OK: inline_serializer( name="GlobalSearchResponse", fields={"results": DictField(child=ListField(child=DictField(child=CharField())))}, ), - 400: inline_serializer(name="GlobalSearchErrorResponse", fields={"error": CharField()}), + status.HTTP_400_BAD_REQUEST: inline_serializer( + name="GlobalSearchErrorResponse", fields={"error": CharField()} + ), }, description=(_("global search endpoint to query across project's tables")), ) @@ -88,14 +133,38 @@ SEARCH_SCHEMA = { BUY_AS_BUSINESS_SCHEMA = { "post": extend_schema( + tags=[ + "misc", + ], summary=_("purchase an order as a business"), request=BuyAsBusinessOrderSerializer, responses={ - 200: TransactionProcessSerializer, - 400: error, + status.HTTP_201_CREATED: TransactionProcessSerializer, + status.HTTP_400_BAD_REQUEST: error, }, description=( _("purchase an order as a business, using the provided `products` with `product_uuid` and `attributes`.") ), ) } + +DOWNLOAD_DIGITAL_ASSET_SCHEMA = { + "get": extend_schema( + tags=[ + "misc", + ], + parameters=[ + OpenApiParameter( + name="order_product_uuid", + location="path", + required=True, + allow_blank=False, + ) + ], + summary=_("download a digital asset from purchased digital order"), + responses={ + status.HTTP_200_OK: FileResponse, + status.HTTP_400_BAD_REQUEST: error, + }, + ) +} diff --git a/core/docs/drf/viewsets.py b/engine/core/docs/drf/viewsets.py similarity index 56% rename from core/docs/drf/viewsets.py rename to engine/core/docs/drf/viewsets.py index 6a2dbfd1..0edfda81 100644 --- a/core/docs/drf/viewsets.py +++ b/engine/core/docs/drf/viewsets.py @@ -3,8 +3,8 @@ from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import OpenApiParameter, extend_schema from rest_framework import status -from core.docs.drf import BASE_ERRORS -from core.serializers import ( +from engine.core.docs.drf import BASE_ERRORS +from engine.core.serializers import ( AddOrderProductSerializer, AddressSerializer, AddWishlistProductSerializer, @@ -14,6 +14,8 @@ from core.serializers import ( AttributeSimpleSerializer, AttributeValueDetailSerializer, AttributeValueSimpleSerializer, + BrandDetailSerializer, + BrandSimpleSerializer, BulkAddOrderProductsSerializer, BulkAddWishlistProductSerializer, BulkRemoveOrderProductsSerializer, @@ -29,37 +31,68 @@ from core.serializers import ( OrderProductSimpleSerializer, OrderSimpleSerializer, ProductDetailSerializer, + ProductImageDetailSerializer, + ProductImageSimpleSerializer, ProductSimpleSerializer, + ProductTagDetailSerializer, + ProductTagSimpleSerializer, + PromoCodeDetailSerializer, + PromoCodeSimpleSerializer, + PromotionDetailSerializer, + PromotionSimpleSerializer, RemoveOrderProductSerializer, RemoveWishlistProductSerializer, + StockDetailSerializer, + StockSimpleSerializer, + VendorDetailSerializer, + VendorSimpleSerializer, WishlistDetailSerializer, WishlistSimpleSerializer, ) -from core.serializers.utility import AddressCreateSerializer, AddressSuggestionSerializer, DoFeedbackSerializer -from payments.serializers import TransactionProcessSerializer +from engine.core.serializers.seo import SeoSnapshotSerializer +from engine.core.serializers.utility import AddressCreateSerializer, AddressSuggestionSerializer, DoFeedbackSerializer +from engine.payments.serializers import TransactionProcessSerializer ATTRIBUTE_GROUP_SCHEMA = { "list": extend_schema( + tags=[ + "attributeGroups", + ], summary=_("list all attribute groups (simple view)"), responses={status.HTTP_200_OK: AttributeGroupSimpleSerializer(many=True), **BASE_ERRORS}, ), "retrieve": extend_schema( + tags=[ + "attributeGroups", + ], summary=_("retrieve a single attribute group (detailed view)"), responses={status.HTTP_200_OK: AttributeGroupDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( + tags=[ + "attributeGroups", + ], summary=_("create an attribute group"), responses={status.HTTP_201_CREATED: AttributeGroupDetailSerializer(), **BASE_ERRORS}, ), "destroy": extend_schema( + tags=[ + "attributeGroups", + ], summary=_("delete an attribute group"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "update": extend_schema( + tags=[ + "attributeGroups", + ], summary=_("rewrite an existing attribute group saving non-editables"), responses={status.HTTP_200_OK: AttributeGroupDetailSerializer(), **BASE_ERRORS}, ), "partial_update": extend_schema( + tags=[ + "attributeGroups", + ], summary=_("rewrite some fields of an existing attribute group saving non-editables"), responses={status.HTTP_200_OK: AttributeGroupDetailSerializer(), **BASE_ERRORS}, ), @@ -67,26 +100,44 @@ ATTRIBUTE_GROUP_SCHEMA = { ATTRIBUTE_SCHEMA = { "list": extend_schema( + tags=[ + "attributes", + ], summary=_("list all attributes (simple view)"), responses={status.HTTP_200_OK: AttributeSimpleSerializer(many=True), **BASE_ERRORS}, ), "retrieve": extend_schema( + tags=[ + "attributes", + ], summary=_("retrieve a single attribute (detailed view)"), responses={status.HTTP_200_OK: AttributeDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( + tags=[ + "attributes", + ], summary=_("create an attribute"), responses={status.HTTP_201_CREATED: AttributeDetailSerializer(), **BASE_ERRORS}, ), "destroy": extend_schema( + tags=[ + "attributes", + ], summary=_("delete an attribute"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "update": extend_schema( + tags=[ + "attributes", + ], summary=_("rewrite an existing attribute saving non-editables"), responses={status.HTTP_200_OK: AttributeDetailSerializer(), **BASE_ERRORS}, ), "partial_update": extend_schema( + tags=[ + "attributes", + ], summary=_("rewrite some fields of an existing attribute saving non-editables"), responses={status.HTTP_200_OK: AttributeDetailSerializer(), **BASE_ERRORS}, ), @@ -94,26 +145,44 @@ ATTRIBUTE_SCHEMA = { ATTRIBUTE_VALUE_SCHEMA = { "list": extend_schema( + tags=[ + "attributeValues", + ], summary=_("list all attribute values (simple view)"), responses={status.HTTP_200_OK: AttributeValueSimpleSerializer(many=True), **BASE_ERRORS}, ), "retrieve": extend_schema( + tags=[ + "attributeValues", + ], summary=_("retrieve a single attribute value (detailed view)"), responses={status.HTTP_200_OK: AttributeValueDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( + tags=[ + "attributeValues", + ], summary=_("create an attribute value"), responses={status.HTTP_201_CREATED: AttributeValueDetailSerializer(), **BASE_ERRORS}, ), "destroy": extend_schema( + tags=[ + "attributeValues", + ], summary=_("delete an attribute value"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "update": extend_schema( + tags=[ + "attributeValues", + ], summary=_("rewrite an existing attribute value saving non-editables"), responses={status.HTTP_200_OK: AttributeValueDetailSerializer(), **BASE_ERRORS}, ), "partial_update": extend_schema( + tags=[ + "attributeValues", + ], summary=_("rewrite some fields of an existing attribute value saving non-editables"), responses={status.HTTP_200_OK: AttributeValueDetailSerializer(), **BASE_ERRORS}, ), @@ -121,33 +190,87 @@ ATTRIBUTE_VALUE_SCHEMA = { CATEGORY_SCHEMA = { "list": extend_schema( + tags=[ + "categories", + ], summary=_("list all categories (simple view)"), + description=_("list all categories (simple view)"), responses={status.HTTP_200_OK: CategorySimpleSerializer(many=True), **BASE_ERRORS}, ), "retrieve": extend_schema( + tags=[ + "categories", + ], summary=_("retrieve a single category (detailed view)"), + description=_("retrieve a single category (detailed view)"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Category UUID or slug"), + type=str, + ), + ], responses={status.HTTP_200_OK: CategoryDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( + tags=[ + "categories", + ], summary=_("create a category"), + description=_("create a category"), responses={status.HTTP_201_CREATED: CategoryDetailSerializer(), **BASE_ERRORS}, ), "destroy": extend_schema( + tags=[ + "categories", + ], summary=_("delete a category"), + description=_("delete a category"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "update": extend_schema( + tags=[ + "categories", + ], summary=_("rewrite an existing category saving non-editables"), + description=_("rewrite an existing category saving non-editables"), responses={status.HTTP_200_OK: CategoryDetailSerializer(), **BASE_ERRORS}, ), "partial_update": extend_schema( + tags=[ + "categories", + ], summary=_("rewrite some fields of an existing category saving non-editables"), + description=_("rewrite some fields of an existing category saving non-editables"), responses={status.HTTP_200_OK: CategoryDetailSerializer(), **BASE_ERRORS}, ), + "seo_meta": extend_schema( + tags=[ + "categories", + ], + summary=_("SEO Meta snapshot"), + description=_("returns a snapshot of the category's SEO meta data"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Category UUID or slug"), + type=str, + ), + ], + responses={ + status.HTTP_200_OK: SeoSnapshotSerializer(), + **BASE_ERRORS, + }, + ), } ORDER_SCHEMA = { "list": extend_schema( + tags=[ + "orders", + ], summary=_("list all orders (simple view)"), description=_("for non-staff users, only their own orders are returned."), parameters=[ @@ -207,27 +330,53 @@ ORDER_SCHEMA = { responses={status.HTTP_200_OK: OrderSimpleSerializer(many=True), **BASE_ERRORS}, ), "retrieve": extend_schema( + tags=[ + "orders", + ], summary=_("retrieve a single order (detailed view)"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Order UUID or human-readable id"), + type=str, + ), + ], responses={status.HTTP_200_OK: OrderDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( + tags=[ + "orders", + ], summary=_("create an order"), description=_("doesn't work for non-staff users."), responses={status.HTTP_201_CREATED: OrderDetailSerializer(), **BASE_ERRORS}, ), "destroy": extend_schema( + tags=[ + "orders", + ], summary=_("delete an order"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "update": extend_schema( + tags=[ + "orders", + ], summary=_("rewrite an existing order saving non-editables"), responses={status.HTTP_200_OK: OrderDetailSerializer(), **BASE_ERRORS}, ), "partial_update": extend_schema( + tags=[ + "orders", + ], summary=_("rewrite some fields of an existing order saving non-editables"), responses={status.HTTP_200_OK: OrderDetailSerializer(), **BASE_ERRORS}, ), "buy": extend_schema( + tags=[ + "orders", + ], summary=_("purchase an order"), description=_( "finalizes the order purchase. if `force_balance` is used," @@ -241,7 +390,21 @@ ORDER_SCHEMA = { **BASE_ERRORS, }, ), + "current": extend_schema( + tags=[ + "orders", + ], + summary=_("retrieve current pending order of a user"), + description=_("retrieves a current pending order of an authenticated user"), + responses={ + status.HTTP_200_OK: OrderDetailSerializer(), + **BASE_ERRORS, + }, + ), "buy_unregistered": extend_schema( + tags=[ + "orders", + ], summary=_("purchase an order without account creation"), description=_("finalizes the order purchase for a non-registered user."), request=BuyUnregisteredOrderSerializer(), @@ -251,24 +414,36 @@ ORDER_SCHEMA = { }, ), "add_order_product": extend_schema( + tags=[ + "orders", + ], summary=_("add product to order"), description=_("adds a product to an order using the provided `product_uuid` and `attributes`."), request=AddOrderProductSerializer(), responses={status.HTTP_200_OK: OrderDetailSerializer(), **BASE_ERRORS}, ), "bulk_add_order_products": extend_schema( + tags=[ + "orders", + ], summary=_("add a list of products to order, quantities will not count"), description=_("adds a list of products to an order using the provided `product_uuid` and `attributes`."), request=BulkAddOrderProductsSerializer(), responses={status.HTTP_200_OK: OrderDetailSerializer(), **BASE_ERRORS}, ), "remove_order_product": extend_schema( + tags=[ + "orders", + ], summary=_("remove product from order"), description=_("removes a product from an order using the provided `product_uuid` and `attributes`."), request=RemoveOrderProductSerializer(), responses={status.HTTP_200_OK: OrderDetailSerializer(), **BASE_ERRORS}, ), "bulk_remove_order_products": extend_schema( + tags=[ + "orders", + ], summary=_("remove product from order, quantities will not count"), description=_("removes a list of products from an order using the provided `product_uuid` and `attributes`"), request=BulkRemoveOrderProductsSerializer(), @@ -278,50 +453,91 @@ ORDER_SCHEMA = { WISHLIST_SCHEMA = { "list": extend_schema( + tags=[ + "wishlists", + ], summary=_("list all wishlists (simple view)"), description=_("for non-staff users, only their own wishlists are returned."), responses={status.HTTP_200_OK: WishlistSimpleSerializer(many=True), **BASE_ERRORS}, ), "retrieve": extend_schema( + tags=[ + "wishlists", + ], summary=_("retrieve a single wishlist (detailed view)"), responses={status.HTTP_200_OK: WishlistDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( + tags=[ + "wishlists", + ], summary=_("create an wishlist"), description=_("Doesn't work for non-staff users."), responses={status.HTTP_201_CREATED: WishlistDetailSerializer(), **BASE_ERRORS}, ), "destroy": extend_schema( + tags=[ + "wishlists", + ], summary=_("delete an wishlist"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "update": extend_schema( + tags=[ + "wishlists", + ], summary=_("rewrite an existing wishlist saving non-editables"), responses={status.HTTP_200_OK: WishlistDetailSerializer(), **BASE_ERRORS}, ), "partial_update": extend_schema( + tags=[ + "wishlists", + ], summary=_("rewrite some fields of an existing wishlist saving non-editables"), responses={status.HTTP_200_OK: WishlistDetailSerializer(), **BASE_ERRORS}, ), + "current": extend_schema( + tags=[ + "wishlists", + ], + summary=_("retrieve current pending wishlist of a user"), + description=_("retrieves a current pending wishlist of an authenticated user"), + responses={ + status.HTTP_200_OK: WishlistDetailSerializer(), + **BASE_ERRORS, + }, + ), "add_wishlist_product": extend_schema( + tags=[ + "wishlists", + ], summary=_("add product to wishlist"), description=_("adds a product to an wishlist using the provided `product_uuid`"), request=AddWishlistProductSerializer(), responses={status.HTTP_200_OK: WishlistDetailSerializer(), **BASE_ERRORS}, ), "remove_wishlist_product": extend_schema( + tags=[ + "wishlists", + ], summary=_("remove product from wishlist"), description=_("removes a product from an wishlist using the provided `product_uuid`"), request=RemoveWishlistProductSerializer(), responses={status.HTTP_200_OK: WishlistDetailSerializer(), **BASE_ERRORS}, ), "bulk_add_wishlist_products": extend_schema( + tags=[ + "wishlists", + ], summary=_("add many products to wishlist"), description=_("adds many products to an wishlist using the provided `product_uuids`"), request=BulkAddWishlistProductSerializer(), responses={status.HTTP_200_OK: WishlistDetailSerializer(), **BASE_ERRORS}, ), "bulk_remove_wishlist_products": extend_schema( + tags=[ + "wishlists", + ], summary=_("remove many products from wishlist"), description=_("removes many products from an wishlist using the provided `product_uuids`"), request=BulkRemoveWishlistProductSerializer(), @@ -346,7 +562,11 @@ ATTRIBUTES_DESC = _( PRODUCT_SCHEMA = { "list": extend_schema( + tags=[ + "products", + ], summary=_("list all products (simple view)"), + description=_("list all products (simple view)"), parameters=[ OpenApiParameter( name="uuid", @@ -354,72 +574,6 @@ PRODUCT_SCHEMA = { description=_("(exact) Product UUID"), type=str, ), - OpenApiParameter( - name="name", - location="query", - description=_("(icontains) Product name"), - type=str, - ), - OpenApiParameter( - name="categories", - location="query", - description=_("(list) Category names, case-insensitive"), - type=str, - ), - OpenApiParameter( - name="category_uuid", - location="query", - description=_("(exact) Category UUID"), - type=str, - ), - OpenApiParameter( - name="tags", - location="query", - description=_("(list) Tag names, case-insensitive"), - type=str, - ), - OpenApiParameter( - name="min_price", - location="query", - description=_("(gte) Minimum stock price"), - type=float, - ), - OpenApiParameter( - name="max_price", - location="query", - description=_("(lte) Maximum stock price"), - type=float, - ), - OpenApiParameter( - name="is_active", - location="query", - description=_("(exact) Only active products"), - type=bool, - ), - OpenApiParameter( - name="brand", - location="query", - description=_("(iexact) Brand name"), - type=str, - ), - OpenApiParameter( - name="attributes", - location="query", - description=ATTRIBUTES_DESC, - type=str, - ), - OpenApiParameter( - name="quantity", - location="query", - description=_("(gt) Minimum stock quantity"), - type=int, - ), - OpenApiParameter( - name="is_digital", - location="query", - description=_("(exact) Digital vs. physical"), - type=bool, - ), OpenApiParameter( name="order_by", location="query", @@ -438,7 +592,11 @@ PRODUCT_SCHEMA = { }, ), "retrieve": extend_schema( + tags=[ + "products", + ], summary=_("retrieve a single product (detailed view)"), + description=_("retrieve a single product (detailed view)"), parameters=[ OpenApiParameter( name="lookup_value", @@ -453,17 +611,25 @@ PRODUCT_SCHEMA = { }, ), "create": extend_schema( + tags=[ + "products", + ], summary=_("create a product"), + description=_("create a product"), responses={ status.HTTP_201_CREATED: ProductDetailSerializer(), **BASE_ERRORS, }, ), "update": extend_schema( + tags=[ + "products", + ], summary=_("rewrite an existing product, preserving non-editable fields"), + description=_("rewrite an existing product, preserving non-editable fields"), parameters=[ OpenApiParameter( - name="lookup", + name="lookup_value", location="path", description=_("Product UUID or slug"), type=str, @@ -475,10 +641,14 @@ PRODUCT_SCHEMA = { }, ), "partial_update": extend_schema( + tags=[ + "products", + ], summary=_("update some fields of an existing product, preserving non-editable fields"), + description=_("update some fields of an existing product, preserving non-editable fields"), parameters=[ OpenApiParameter( - name="lookup", + name="lookup_value", location="path", description=_("Product UUID or slug"), type=str, @@ -490,10 +660,14 @@ PRODUCT_SCHEMA = { }, ), "destroy": extend_schema( + tags=[ + "products", + ], summary=_("delete a product"), + description=_("delete a product"), parameters=[ OpenApiParameter( - name="lookup", + name="lookup_value", location="path", description=_("Product UUID or slug"), type=str, @@ -505,17 +679,40 @@ PRODUCT_SCHEMA = { }, ), "feedbacks": extend_schema( + tags=[ + "products", + ], summary=_("lists all permitted feedbacks for a product"), + description=_("lists all permitted feedbacks for a product"), parameters=[ OpenApiParameter( - name="lookup", + name="lookup_value", location="path", description=_("Product UUID or slug"), type=str, ), ], responses={ - status.HTTP_200_OK: FeedbackDetailSerializer(many=True), + status.HTTP_200_OK: FeedbackSimpleSerializer(many=True), + **BASE_ERRORS, + }, + ), + "seo_meta": extend_schema( + tags=[ + "products", + ], + summary=_("SEO Meta snapshot"), + description=_("returns a snapshot of the product's SEO meta data"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Product UUID or slug"), + type=str, + ), + ], + responses={ + status.HTTP_200_OK: SeoSnapshotSerializer(), **BASE_ERRORS, }, ), @@ -523,6 +720,9 @@ PRODUCT_SCHEMA = { ADDRESS_SCHEMA = { "list": extend_schema( + tags=[ + "addresses", + ], summary=_("list all addresses"), responses={ status.HTTP_200_OK: AddressSerializer(many=True), @@ -530,6 +730,9 @@ ADDRESS_SCHEMA = { }, ), "retrieve": extend_schema( + tags=[ + "addresses", + ], summary=_("retrieve a single address"), responses={ status.HTTP_200_OK: AddressSerializer(), @@ -537,6 +740,9 @@ ADDRESS_SCHEMA = { }, ), "create": extend_schema( + tags=[ + "addresses", + ], summary=_("create a new address"), request=AddressCreateSerializer(), responses={ @@ -545,6 +751,9 @@ ADDRESS_SCHEMA = { }, ), "destroy": extend_schema( + tags=[ + "addresses", + ], summary=_("delete an address"), responses={ status.HTTP_204_NO_CONTENT: {}, @@ -552,6 +761,9 @@ ADDRESS_SCHEMA = { }, ), "update": extend_schema( + tags=[ + "addresses", + ], summary=_("update an entire address"), request=AddressSerializer(), responses={ @@ -560,6 +772,9 @@ ADDRESS_SCHEMA = { }, ), "partial_update": extend_schema( + tags=[ + "addresses", + ], summary=_("partially update an address"), request=AddressSerializer(), responses={ @@ -568,6 +783,9 @@ ADDRESS_SCHEMA = { }, ), "autocomplete": extend_schema( + tags=[ + "addresses", + ], summary=_("autocomplete address suggestions"), parameters=[ OpenApiParameter( @@ -592,26 +810,44 @@ ADDRESS_SCHEMA = { FEEDBACK_SCHEMA = { "list": extend_schema( + tags=[ + "feedbacks", + ], summary=_("list all feedbacks (simple view)"), responses={status.HTTP_200_OK: FeedbackSimpleSerializer(many=True), **BASE_ERRORS}, ), "retrieve": extend_schema( + tags=[ + "feedbacks", + ], summary=_("retrieve a single feedback (detailed view)"), responses={status.HTTP_200_OK: FeedbackDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( + tags=[ + "feedbacks", + ], summary=_("create a feedback"), responses={status.HTTP_201_CREATED: FeedbackDetailSerializer(), **BASE_ERRORS}, ), "destroy": extend_schema( + tags=[ + "feedbacks", + ], summary=_("delete a feedback"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "update": extend_schema( + tags=[ + "feedbacks", + ], summary=_("rewrite an existing feedback saving non-editables"), responses={status.HTTP_200_OK: FeedbackDetailSerializer(), **BASE_ERRORS}, ), "partial_update": extend_schema( + tags=[ + "feedbacks", + ], summary=_("rewrite some fields of an existing feedback saving non-editables"), responses={status.HTTP_200_OK: FeedbackDetailSerializer(), **BASE_ERRORS}, ), @@ -619,6 +855,9 @@ FEEDBACK_SCHEMA = { ORDER_PRODUCT_SCHEMA = { "list": extend_schema( + tags=[ + "orderProducts", + ], summary=_("list all order–product relations (simple view)"), responses={ status.HTTP_200_OK: OrderProductSimpleSerializer(many=True), @@ -626,6 +865,9 @@ ORDER_PRODUCT_SCHEMA = { }, ), "retrieve": extend_schema( + tags=[ + "orderProducts", + ], summary=_("retrieve a single order–product relation (detailed view)"), responses={ status.HTTP_200_OK: OrderProductDetailSerializer(), @@ -633,6 +875,9 @@ ORDER_PRODUCT_SCHEMA = { }, ), "create": extend_schema( + tags=[ + "orderProducts", + ], summary=_("create a new order–product relation"), responses={ status.HTTP_201_CREATED: OrderProductDetailSerializer(), @@ -640,6 +885,9 @@ ORDER_PRODUCT_SCHEMA = { }, ), "update": extend_schema( + tags=[ + "orderProducts", + ], summary=_("replace an existing order–product relation"), responses={ status.HTTP_200_OK: OrderProductDetailSerializer(), @@ -647,6 +895,9 @@ ORDER_PRODUCT_SCHEMA = { }, ), "partial_update": extend_schema( + tags=[ + "orderProducts", + ], summary=_("partially update an existing order–product relation"), responses={ status.HTTP_200_OK: OrderProductDetailSerializer(), @@ -654,6 +905,9 @@ ORDER_PRODUCT_SCHEMA = { }, ), "destroy": extend_schema( + tags=[ + "orderProducts", + ], summary=_("delete an order–product relation"), responses={ status.HTTP_204_NO_CONTENT: {}, @@ -661,6 +915,9 @@ ORDER_PRODUCT_SCHEMA = { }, ), "do_feedback": extend_schema( + tags=[ + "orderProducts", + ], summary=_("add or remove feedback on an order–product relation"), request=DoFeedbackSerializer, responses={ @@ -672,3 +929,341 @@ ORDER_PRODUCT_SCHEMA = { }, ), } + +BRAND_SCHEMA = { + "list": extend_schema( + tags=[ + "brands", + ], + summary=_("list all brands (simple view)"), + responses={status.HTTP_200_OK: BrandSimpleSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "brands", + ], + summary=_("retrieve a single brand (detailed view)"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Brand UUID or slug"), + type=str, + ), + ], + responses={status.HTTP_200_OK: BrandDetailSerializer(), **BASE_ERRORS}, + ), + "create": extend_schema( + tags=[ + "brands", + ], + summary=_("create a brand"), + responses={status.HTTP_201_CREATED: BrandDetailSerializer(), **BASE_ERRORS}, + ), + "destroy": extend_schema( + tags=[ + "brands", + ], + summary=_("delete a brand"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "update": extend_schema( + tags=[ + "brands", + ], + summary=_("rewrite an existing brand saving non-editables"), + responses={status.HTTP_200_OK: BrandDetailSerializer(), **BASE_ERRORS}, + ), + "partial_update": extend_schema( + tags=[ + "brands", + ], + summary=_("rewrite some fields of an existing brand saving non-editables"), + responses={status.HTTP_200_OK: BrandDetailSerializer(), **BASE_ERRORS}, + ), + "seo_meta": extend_schema( + tags=[ + "brands", + ], + summary=_("SEO Meta snapshot"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Brand UUID or slug"), + type=str, + ), + ], + responses={status.HTTP_200_OK: SeoSnapshotSerializer(), **BASE_ERRORS}, + ), +} + +VENDOR_SCHEMA = { + "list": extend_schema( + tags=[ + "vendors", + ], + summary=_("list all vendors (simple view)"), + responses={status.HTTP_200_OK: VendorSimpleSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "vendors", + ], + summary=_("retrieve a single vendor (detailed view)"), + responses={status.HTTP_200_OK: VendorDetailSerializer(), **BASE_ERRORS}, + ), + "create": extend_schema( + tags=[ + "vendors", + ], + summary=_("create a vendor"), + responses={status.HTTP_201_CREATED: VendorDetailSerializer(), **BASE_ERRORS}, + ), + "destroy": extend_schema( + tags=[ + "vendors", + ], + summary=_("delete a vendor"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "update": extend_schema( + tags=[ + "vendors", + ], + summary=_("rewrite an existing vendor saving non-editables"), + responses={status.HTTP_200_OK: VendorDetailSerializer(), **BASE_ERRORS}, + ), + "partial_update": extend_schema( + tags=[ + "vendors", + ], + summary=_("rewrite some fields of an existing vendor saving non-editables"), + responses={status.HTTP_200_OK: VendorDetailSerializer(), **BASE_ERRORS}, + ), +} + +PRODUCT_IMAGE_SCHEMA = { + "list": extend_schema( + tags=[ + "productImages", + ], + summary=_("list all product images (simple view)"), + responses={status.HTTP_200_OK: ProductImageSimpleSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "productImages", + ], + summary=_("retrieve a single product image (detailed view)"), + responses={status.HTTP_200_OK: ProductImageDetailSerializer(), **BASE_ERRORS}, + ), + "create": extend_schema( + tags=[ + "productImages", + ], + summary=_("create a product image"), + responses={status.HTTP_201_CREATED: ProductImageDetailSerializer(), **BASE_ERRORS}, + ), + "destroy": extend_schema( + tags=[ + "productImages", + ], + summary=_("delete a product image"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "update": extend_schema( + tags=[ + "productImages", + ], + summary=_("rewrite an existing product image saving non-editables"), + responses={status.HTTP_200_OK: ProductImageDetailSerializer(), **BASE_ERRORS}, + ), + "partial_update": extend_schema( + tags=[ + "productImages", + ], + summary=_("rewrite some fields of an existing product image saving non-editables"), + responses={status.HTTP_200_OK: ProductImageDetailSerializer(), **BASE_ERRORS}, + ), +} + +PROMOCODE_SCHEMA = { + "list": extend_schema( + tags=[ + "promocodes", + ], + summary=_("list all promo codes (simple view)"), + responses={status.HTTP_200_OK: PromoCodeSimpleSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "promocodes", + ], + summary=_("retrieve a single promo code (detailed view)"), + responses={status.HTTP_200_OK: PromoCodeDetailSerializer(), **BASE_ERRORS}, + ), + "create": extend_schema( + tags=[ + "promocodes", + ], + summary=_("create a promo code"), + responses={status.HTTP_201_CREATED: PromoCodeDetailSerializer(), **BASE_ERRORS}, + ), + "destroy": extend_schema( + tags=[ + "promocodes", + ], + summary=_("delete a promo code"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "update": extend_schema( + tags=[ + "promocodes", + ], + summary=_("rewrite an existing promo code saving non-editables"), + responses={status.HTTP_200_OK: PromoCodeDetailSerializer(), **BASE_ERRORS}, + ), + "partial_update": extend_schema( + tags=[ + "promocodes", + ], + summary=_("rewrite some fields of an existing promo code saving non-editables"), + responses={status.HTTP_200_OK: PromoCodeDetailSerializer(), **BASE_ERRORS}, + ), +} + +PROMOTION_SCHEMA = { + "list": extend_schema( + tags=[ + "promotions", + ], + summary=_("list all promotions (simple view)"), + responses={status.HTTP_200_OK: PromotionSimpleSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "promotions", + ], + summary=_("retrieve a single promotion (detailed view)"), + responses={status.HTTP_200_OK: PromotionDetailSerializer(), **BASE_ERRORS}, + ), + "create": extend_schema( + tags=[ + "promotions", + ], + summary=_("create a promotion"), + responses={status.HTTP_201_CREATED: PromotionDetailSerializer(), **BASE_ERRORS}, + ), + "destroy": extend_schema( + tags=[ + "promotions", + ], + summary=_("delete a promotion"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "update": extend_schema( + tags=[ + "promotions", + ], + summary=_("rewrite an existing promotion saving non-editables"), + responses={status.HTTP_200_OK: PromotionDetailSerializer(), **BASE_ERRORS}, + ), + "partial_update": extend_schema( + tags=[ + "promotions", + ], + summary=_("rewrite some fields of an existing promotion saving non-editables"), + responses={status.HTTP_200_OK: PromotionDetailSerializer(), **BASE_ERRORS}, + ), +} + +STOCK_SCHEMA = { + "list": extend_schema( + tags=[ + "stocks", + ], + summary=_("list all stocks (simple view)"), + responses={status.HTTP_200_OK: StockSimpleSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "stocks", + ], + summary=_("retrieve a single stock (detailed view)"), + responses={status.HTTP_200_OK: StockDetailSerializer(), **BASE_ERRORS}, + ), + "create": extend_schema( + tags=[ + "stocks", + ], + summary=_("create a stock record"), + responses={status.HTTP_201_CREATED: StockDetailSerializer(), **BASE_ERRORS}, + ), + "destroy": extend_schema( + tags=[ + "stocks", + ], + summary=_("delete a stock record"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "update": extend_schema( + tags=[ + "stocks", + ], + summary=_("rewrite an existing stock record saving non-editables"), + responses={status.HTTP_200_OK: StockDetailSerializer(), **BASE_ERRORS}, + ), + "partial_update": extend_schema( + tags=[ + "stocks", + ], + summary=_("rewrite some fields of an existing stock record saving non-editables"), + responses={status.HTTP_200_OK: StockDetailSerializer(), **BASE_ERRORS}, + ), +} + +PRODUCT_TAG_SCHEMA = { + "list": extend_schema( + tags=[ + "productTags", + ], + summary=_("list all product tags (simple view)"), + responses={status.HTTP_200_OK: ProductTagSimpleSerializer(many=True), **BASE_ERRORS}, + ), + "retrieve": extend_schema( + tags=[ + "productTags", + ], + summary=_("retrieve a single product tag (detailed view)"), + responses={status.HTTP_200_OK: ProductTagDetailSerializer(), **BASE_ERRORS}, + ), + "create": extend_schema( + tags=[ + "productTags", + ], + summary=_("create a product tag"), + responses={status.HTTP_201_CREATED: ProductTagDetailSerializer(), **BASE_ERRORS}, + ), + "destroy": extend_schema( + tags=[ + "productTags", + ], + summary=_("delete a product tag"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "update": extend_schema( + tags=[ + "productTags", + ], + summary=_("rewrite an existing product tag saving non-editables"), + responses={status.HTTP_200_OK: ProductTagDetailSerializer(), **BASE_ERRORS}, + ), + "partial_update": extend_schema( + tags=[ + "productTags", + ], + summary=_("rewrite some fields of an existing product tag saving non-editables"), + responses={status.HTTP_200_OK: ProductTagDetailSerializer(), **BASE_ERRORS}, + ), +} diff --git a/core/docs/images/evibes-big-simple.png b/engine/core/docs/images/evibes-big-simple.png similarity index 100% rename from core/docs/images/evibes-big-simple.png rename to engine/core/docs/images/evibes-big-simple.png diff --git a/core/docs/images/evibes-big.png b/engine/core/docs/images/evibes-big.png similarity index 100% rename from core/docs/images/evibes-big.png rename to engine/core/docs/images/evibes-big.png diff --git a/core/static/favicon.ico b/engine/core/docs/images/evibes.ico similarity index 100% rename from core/static/favicon.ico rename to engine/core/docs/images/evibes.ico diff --git a/core/docs/images/evibes.png b/engine/core/docs/images/evibes.png similarity index 100% rename from core/docs/images/evibes.png rename to engine/core/docs/images/evibes.png diff --git a/core/docs/images/favicon.svg b/engine/core/docs/images/favicon.svg similarity index 100% rename from core/docs/images/favicon.svg rename to engine/core/docs/images/favicon.svg diff --git a/engine/core/elasticsearch/__init__.py b/engine/core/elasticsearch/__init__.py new file mode 100644 index 00000000..2711fb6b --- /dev/null +++ b/engine/core/elasticsearch/__init__.py @@ -0,0 +1,617 @@ +import re +from typing import Any + +from typing import Callable +from django.conf import settings +from django.db.models import QuerySet +from django.http import Http404 +from django.utils.text import slugify +from django.utils.translation import gettext_lazy as _ +from django_elasticsearch_dsl import fields +from django_elasticsearch_dsl.registries import registry +from elasticsearch import NotFoundError +from elasticsearch.dsl import Q, Search +from rest_framework.request import Request + +from engine.core.models import Brand, Category, Product + +SMART_FIELDS = [ + "name^6", + "name.ngram^6", + "name.phonetic^4", + "name.translit^5", + "title^4", + "title.ngram^5", + "title.phonetic^3", + "title.translit^4", + "description^2", + "description.ngram^3", + "description.phonetic^2", + "description.translit^3", + "brand_name^4", + "brand_name.ngram^3", + "brand_name.auto^4", + "brand_name.translit^4", + "category_name^3", + "category_name.ngram^3", + "category_name.auto^3", + "category_name.translit^3", + "sku^7", + "sku.ngram^5", + "sku.auto^6", + "partnumber^8", + "partnumber.ngram^6", + "partnumber.auto^7", +] + +functions = [ + { + "filter": Q("term", **{"_index": "products"}), + "field_value_factor": { + "field": "brand_priority", + "modifier": "log1p", + "factor": 0.15, + "missing": 0, + }, + "weight": 0.35, + }, + { + "filter": Q("term", **{"_index": "products"}), + "field_value_factor": { + "field": "category_priority", + "modifier": "log1p", + "factor": 0.16, + "missing": 0, + }, + "weight": 0.36, + }, + { + "filter": Q("term", **{"_index": "products"}), + "field_value_factor": { + "field": "rating", + "modifier": "log1p", + "factor": 0.08, + "missing": 0, + }, + "weight": 0.25, + }, + { + "filter": Q("term", **{"_index": "products"}), + "field_value_factor": { + "field": "total_orders", + "modifier": "log1p", + "factor": 0.15, + "missing": 0, + }, + "weight": 0.3, + }, + { + "filter": Q("bool", must=[Q("term", **{"_index": "products"}), Q("term", **{"personal_orders_only": False})]), + "weight": 0.7, + }, + { + "filter": Q("term", **{"_index": "categories"}), + "field_value_factor": { + "field": "priority", + "modifier": "log1p", + "factor": 0.18, + "missing": 0, + }, + "weight": 0.45, + }, + { + "filter": Q("term", **{"_index": "brands"}), + "field_value_factor": { + "field": "priority", + "modifier": "log1p", + "factor": 0.18, + "missing": 0, + }, + "weight": 0.45, + }, +] + + +def process_query( + query: str = "", + request: Request | None = None, + indexes: tuple[str, ...] = ("categories", "brands", "products"), + use_transliteration: bool = True, +) -> dict[str, list[dict[str, Any]]] | None: + if not query: + raise ValueError(_("no search term provided.")) + + query = query.strip() + try: + exact_shoulds = [ + Q("term", **{"partnumber.raw": {"value": query.lower(), "boost": 20.0}}), + Q("term", **{"sku.raw": {"value": query.lower(), "boost": 16.0}}), + Q("term", **{"slug": {"value": slugify(query), "boost": 12.0}}), + Q("match", **{"name.ci": {"query": query, "boost": 8.0}}), + ] + + lang = "" + if request and hasattr(request, "LANGUAGE_CODE") and request.LANGUAGE_CODE: + lang = request.LANGUAGE_CODE.lower() + base = lang.split("-")[0] if lang else "" + + is_cjk = base in {"ja", "zh"} + is_rtl_or_indic = base in {"ar", "hi"} + + fields_all = SMART_FIELDS[:] + if not use_transliteration: + fields_all = [f for f in fields_all if ".translit" not in f] + + if is_cjk or is_rtl_or_indic: + fields_all = [f for f in fields_all if ".phonetic" not in f] + fields_all = [ + f.replace("name.ngram^6", "name.ngram^8") + .replace("title.ngram^5", "title.ngram^7") + .replace("description.ngram^3", "description.ngram^4") + for f in fields_all + ] + + fuzzy = None if (is_cjk or is_rtl_or_indic) else "AUTO:5,8" + + is_code_like = bool(re.search(r"[0-9]", query)) and " " not in query + + text_shoulds = [ + Q( + "multi_match", + query=query, + fields=fields_all, + operator="and", + type="most_fields", + tie_breaker=0.2, + **({"fuzziness": fuzzy} if fuzzy else {}), + ), + Q( + "multi_match", + query=query, + fields=[f for f in fields_all if f.endswith(".auto")], + type="bool_prefix", + ), + ] + + if is_code_like: + text_shoulds.extend( + [ + Q("term", **{"partnumber.raw": {"value": query.lower(), "boost": 14.0}}), + Q("term", **{"sku.raw": {"value": query.lower(), "boost": 12.0}}), + Q("prefix", **{"partnumber.raw": {"value": query.lower(), "boost": 4.0}}), + ] + ) + + query_base = Q( + "bool", + should=exact_shoulds + text_shoulds, + minimum_should_match=1, + ) + + def build_search(idxs: list[str], size: int) -> Search: + return ( + Search(index=idxs) + .query(query_base) + .extra( + rescore={ + "window_size": 200, + "query": { + "rescore_query": Q( + "function_score", + query=Q("match_all"), + functions=functions, + boost_mode="sum", + score_mode="sum", + max_boost=1.2, + ).to_dict(), + "query_weight": 1.0, + "rescore_query_weight": 0.6, + }, + } + ) + .extra(size=size, track_total_hits=True) + ) + + resp_cats = None + if "categories" in indexes: + search_cats = build_search(["categories"], size=33) + resp_cats = search_cats.execute() + + resp_brands = None + if "brands" in indexes: + search_brands = build_search(["brands"], size=33) + resp_brands = search_brands.execute() + + resp_products = None + if "products" in indexes: + search_products = build_search(["products"], size=33) + resp_products = search_products.execute() + + results: dict[str, list[dict[str, Any]]] = {"products": [], "categories": [], "brands": [], "posts": []} + uuids_by_index: dict[str, list[str]] = {"products": [], "categories": [], "brands": []} + hit_cache: list[Any] = [] + + seen_keys: set[tuple[str, str]] = set() + + def _hit_key(hittee: Any) -> tuple[str, str]: + return hittee.meta.index, str(getattr(hittee, "uuid", None) or hittee.meta.id) + + def _collect_hits(hits: list[Any]) -> None: + for hh in hits: + key = _hit_key(hh) + if key in seen_keys: + continue + hit_cache.append(hh) + seen_keys.add(key) + if getattr(hh, "uuid", None): + uuids_by_index.setdefault(hh.meta.index, []).append(str(hh.uuid)) + + exact_queries_by_index: dict[str, list[Any]] = { + "categories": [ + Q("term", **{"name.raw": {"value": query}}), + Q("term", **{"slug": {"value": slugify(query)}}), + ], + "brands": [ + Q("term", **{"name.raw": {"value": query}}), + Q("term", **{"slug": {"value": slugify(query)}}), + ], + } + + # Collect exact product matches in strict priority: partnumber > sku > slug > name.ci + if "products" in indexes: + product_exact_sequence = [ + Q("term", **{"partnumber.raw": {"value": query.lower()}}), + Q("term", **{"sku.raw": {"value": query.lower()}}), + Q("term", **{"slug": {"value": slugify(query)}}), + Q("match", **{"name.ci": {"query": query}}), + ] + for qx in product_exact_sequence: + try: + resp_exact = Search(index=["products"]).query(qx).extra(size=5, track_total_hits=False).execute() + except NotFoundError: + resp_exact = None + if resp_exact is not None and getattr(resp_exact, "hits", None): + _collect_hits(list(resp_exact.hits)) + + for idx_name in ("categories", "brands"): + if idx_name in indexes: + shoulds = exact_queries_by_index[idx_name] + s_exact = ( + Search(index=[idx_name]) + .query(Q("bool", should=shoulds, minimum_should_match=1)) + .extra(size=5, track_total_hits=False) + ) + try: + resp_exact = s_exact.execute() + except NotFoundError: + resp_exact = None + if resp_exact is not None and getattr(resp_exact, "hits", None): + _collect_hits(list(resp_exact.hits)) + + for h in ( + list(resp_cats.hits[:12] if resp_cats else []) + + list(resp_brands.hits[:12] if resp_brands else []) + + list(resp_products.hits[:26] if resp_products else []) + ): + k = _hit_key(h) + if k in seen_keys: + continue + hit_cache.append(h) + seen_keys.add(k) + if getattr(h, "uuid", None): + uuids_by_index.setdefault(h.meta.index, []).append(str(h.uuid)) + + products_by_uuid = {} + brands_by_uuid = {} + cats_by_uuid = {} + + if request: + if uuids_by_index.get("products"): + products_by_uuid = { + str(p.uuid): p + for p in Product.objects.filter(uuid__in=uuids_by_index["products"]) + .select_related("brand", "category") + .prefetch_related("images") + } + if uuids_by_index.get("brands"): + brands_by_uuid = {str(b.uuid): b for b in Brand.objects.filter(uuid__in=uuids_by_index["brands"])} + if uuids_by_index.get("categories"): + cats_by_uuid = {str(c.uuid): c for c in Category.objects.filter(uuid__in=uuids_by_index["categories"])} + + for hit in hit_cache: + obj_uuid = getattr(hit, "uuid", None) or hit.meta.id + obj_name = getattr(hit, "name", None) or getattr(hit, "title", None) or "N/A" + obj_slug = getattr(hit, "slug", "") or ( + slugify(obj_name) if hit.meta.index in {"brands", "categories"} else "" + ) + + image_url = None + idx = hit.meta.index + if idx == "products" and request: + prod = products_by_uuid.get(str(obj_uuid)) + if prod: + first = prod.images.order_by("priority").first() + if first and first.image: + image_url = request.build_absolute_uri(first.image.url) + elif idx == "brands" and request: + brand = brands_by_uuid.get(str(obj_uuid)) + if brand and brand.small_logo: + image_url = request.build_absolute_uri(brand.small_logo.url) + elif idx == "categories" and request: + cat = cats_by_uuid.get(str(obj_uuid)) + if cat and cat.image: + image_url = request.build_absolute_uri(cat.image.url) + + hit_result = { + "uuid": str(obj_uuid), + "name": obj_name, + "slug": obj_slug, + "image": image_url, + } + + if settings.DEBUG: + if idx == "products": + hit_result["rating_debug"] = getattr(hit, "rating", 0) + hit_result["total_orders_debug"] = getattr(hit, "total_orders", 0) + hit_result["brand_priority_debug"] = getattr(hit, "brand_priority", 0) + hit_result["category_priority_debug"] = getattr(hit, "category_priority", 0) + if idx in ("brands", "categories"): + hit_result["priority_debug"] = getattr(hit, "priority", 0) + + results[idx].append(hit_result) + + return results + except NotFoundError as nfe: + raise Http404 from nfe + + +LANGUAGE_ANALYZER_MAP = { + "cs": "czech", + "da": "danish", + "de": "german", + "en": "english", + "es": "spanish", + "fr": "french", + "it": "italian", + "nl": "dutch", + "pt": "portuguese", + "ro": "romanian", + "ja": "cjk_search", + "zh": "cjk_search", + "ar": "arabic_search", + "hi": "indic_search", + "ru": "russian", + "pl": "standard", + "kk": "standard", +} + + +def _lang_analyzer(lang_code: str) -> str: + base = lang_code.split("-")[0].lower() + return LANGUAGE_ANALYZER_MAP.get(base, "icu_query") + + +class ActiveOnlyMixin: + def get_queryset(self) -> QuerySet[Any]: + return super().get_queryset().filter(is_active=True) # type: ignore [no-any-return, misc] + + def should_index_object(self, obj) -> bool: # type: ignore [no-untyped-def] + return getattr(obj, "is_active", False) + + +COMMON_ANALYSIS = { + "char_filter": { + "icu_nfkc_cf": {"type": "icu_normalizer", "name": "nfkc_cf"}, + "strip_ws_punct": {"type": "pattern_replace", "pattern": "[\\s\\p{Punct}]+", "replacement": ""}, + }, + "filter": { + "edge_ngram_filter": {"type": "edge_ngram", "min_gram": 1, "max_gram": 20}, + "ngram_filter": {"type": "ngram", "min_gram": 2, "max_gram": 20}, + "cjk_bigram": {"type": "cjk_bigram"}, + "icu_folding": {"type": "icu_folding"}, + "double_metaphone": {"type": "phonetic", "encoder": "double_metaphone", "replace": False}, + "arabic_norm": {"type": "arabic_normalization"}, + "indic_norm": {"type": "indic_normalization"}, + "icu_any_latin": {"type": "icu_transform", "id": "Any-Latin"}, + "icu_latin_ascii": {"type": "icu_transform", "id": "Latin-ASCII"}, + "icu_ru_latin_bgn": {"type": "icu_transform", "id": "Russian-Latin/BGN"}, + }, + "analyzer": { + "icu_query": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding"], + }, + "autocomplete": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding", "edge_ngram_filter"], + }, + "autocomplete_search": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding"], + }, + "name_ngram": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding", "ngram_filter"], + }, + "name_phonetic": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding", "double_metaphone"], + }, + "name_exact": { + "type": "custom", + "char_filter": ["icu_nfkc_cf", "strip_ws_punct"], + "tokenizer": "keyword", + "filter": ["lowercase", "icu_folding"], + }, + "cjk_search": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding", "cjk_bigram"], + }, + "arabic_search": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding", "arabic_norm"], + }, + "indic_search": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": ["lowercase", "icu_folding", "indic_norm"], + }, + "translit_index": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": [ + "icu_any_latin", + "icu_ru_latin_bgn", + "icu_latin_ascii", + "lowercase", + "icu_folding", + "double_metaphone", + ], + }, + "translit_query": { + "type": "custom", + "char_filter": ["icu_nfkc_cf"], + "tokenizer": "icu_tokenizer", + "filter": [ + "icu_any_latin", + "icu_ru_latin_bgn", + "icu_latin_ascii", + "lowercase", + "icu_folding", + "double_metaphone", + ], + }, + }, + "normalizer": { + "lc_norm": { + "type": "custom", + "filter": ["lowercase", "icu_folding"], + } + }, +} + + +def add_multilang_fields(cls: Any) -> None: + for code, _lang in settings.LANGUAGES: + lc = code.replace("-", "_").lower() + name_field = f"name_{lc}" + setattr( + cls, + name_field, + fields.TextField( + attr=name_field, + analyzer=_lang_analyzer(code), + copy_to="name", + fields={ + "raw": fields.KeywordField(ignore_above=256), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "phonetic": fields.TextField(analyzer="name_phonetic"), + "translit": fields.TextField(analyzer="translit_index", search_analyzer="translit_query"), + }, + ), + ) + + def make_prepare(attr: str) -> Callable[[Any, Any], str]: + return lambda self, instance: getattr(instance, attr, "") or "" + + setattr(cls, f"prepare_{name_field}", make_prepare(name_field)) + + desc_field = f"description_{lc}" + setattr( + cls, + desc_field, + fields.TextField( + attr=desc_field, + analyzer=_lang_analyzer(code), + copy_to="description", + fields={ + "raw": fields.KeywordField(ignore_above=256), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "phonetic": fields.TextField(analyzer="name_phonetic"), + "translit": fields.TextField(analyzer="translit_index", search_analyzer="translit_query"), + }, + ), + ) + setattr(cls, f"prepare_{desc_field}", make_prepare(desc_field)) + + +def populate_index() -> None: + for doc in registry.get_documents(set(registry.get_models())): + qs = doc().get_indexing_queryset() + doc().update(qs, parallel=True, refresh=True) + return None + + +def process_system_query( + query: str, + *, + indexes: tuple[str, ...] = ("categories", "brands", "products"), + size_per_index: int = 25, + language_code: str | None = None, + use_transliteration: bool = True, +) -> dict[str, list[dict[str, Any]]]: + if not query: + raise ValueError(_("no search term provided.")) + + q = query.strip() + + base = (language_code or "").split("-")[0].lower() if language_code else "" + is_cjk = base in {"ja", "zh"} + is_rtl_or_indic = base in {"ar", "hi"} + + fields_all = [f for f in SMART_FIELDS if not f.startswith(("sku", "partnumber"))] + if not use_transliteration: + fields_all = [f for f in fields_all if ".translit" not in f] + + if is_cjk or is_rtl_or_indic: + fields_all = [f for f in fields_all if ".phonetic" not in f] + fields_all = [ + f.replace("ngram^6", "ngram^8").replace("ngram^5", "ngram^7").replace("ngram^3", "ngram^4") + for f in fields_all + ] + + fuzzy = None if (is_cjk or is_rtl_or_indic) else "AUTO:5,8" + + mm = Q( + "multi_match", + query=q, + fields=fields_all, + operator="and", + type="most_fields", + tie_breaker=0.2, + **({"fuzziness": fuzzy} if fuzzy else {}), + ) + + results: dict[str, list[dict[str, Any]]] = {idx: [] for idx in indexes} + + for idx in indexes: + s = Search(index=[idx]).query(mm).extra(size=size_per_index, track_total_hits=False) + resp = s.execute() + for h in resp.hits: + name = getattr(h, "name", None) or getattr(h, "title", None) or "N/A" + results[idx].append( + { + "id": getattr(h, "uuid", None) or h.meta.id, + "name": name, + "slug": getattr(h, "slug", ""), + "score": getattr(h.meta, "score", None), + } + ) + + return results diff --git a/engine/core/elasticsearch/documents.py b/engine/core/elasticsearch/documents.py new file mode 100644 index 00000000..7b678699 --- /dev/null +++ b/engine/core/elasticsearch/documents.py @@ -0,0 +1,176 @@ +from typing import Any + +from django.db.models import Model, QuerySet +from django_elasticsearch_dsl import Document, fields +from django_elasticsearch_dsl.registries import registry +from health_check.db.models import TestModel + +from engine.core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields +from engine.core.models import Brand, Category, Product + + +class BaseDocument(Document): # type: ignore [misc] + name = fields.TextField( + attr="name", + analyzer="standard", + fields={ + "raw": fields.KeywordField(ignore_above=256), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "phonetic": fields.TextField(analyzer="name_phonetic"), + "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), + "translit": fields.TextField(analyzer="translit_index", search_analyzer="translit_query"), + "ci": fields.TextField(analyzer="name_exact", search_analyzer="name_exact"), + }, + ) + description = fields.TextField( + attr="description", + analyzer="standard", + fields={ + "raw": fields.KeywordField(ignore_above=256), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "phonetic": fields.TextField(analyzer="name_phonetic"), + "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), + "translit": fields.TextField(analyzer="translit_index", search_analyzer="translit_query"), + }, + ) + slug = fields.KeywordField(attr="slug") + + class Index: + settings = { + "number_of_shards": 1, + "number_of_replicas": 0, + "analysis": COMMON_ANALYSIS, + "index": {"max_ngram_diff": 20}, + } + + def prepare_name(self, instance: Model) -> str: + return getattr(instance, "name", "") or "" + + def prepare_description(self, instance: Model) -> str: + return getattr(instance, "description", "") or "" + + +class ProductDocument(ActiveOnlyMixin, BaseDocument): + rating = fields.FloatField(attr="rating") + total_orders = fields.IntegerField(attr="total_orders") + personal_orders_only = fields.BooleanField(attr="personal_orders_only") + brand_priority = fields.IntegerField( + attr="brand.priority", + index=True, + fields={"raw": fields.KeywordField()}, + ) + category_priority = fields.IntegerField( + attr="category.priority", + index=True, + fields={"raw": fields.KeywordField()}, + ) + + brand_name = fields.TextField( + attr="brand.name", + analyzer="standard", + fields={ + "raw": fields.KeywordField(ignore_above=256), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "phonetic": fields.TextField(analyzer="name_phonetic"), + "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), + "translit": fields.TextField(analyzer="translit_index", search_analyzer="translit_query"), + }, + ) + category_name = fields.TextField( + attr="category.name", + analyzer="standard", + fields={ + "raw": fields.KeywordField(ignore_above=256), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "phonetic": fields.TextField(analyzer="name_phonetic"), + "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), + "translit": fields.TextField(analyzer="translit_index", search_analyzer="translit_query"), + }, + ) + + sku = fields.KeywordField( + attr="sku", + normalizer="lc_norm", + fields={ + "raw": fields.KeywordField(normalizer="lc_norm"), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), + }, + ) + + partnumber = fields.KeywordField( + attr="partnumber", + normalizer="lc_norm", + fields={ + "raw": fields.KeywordField(normalizer="lc_norm"), + "ngram": fields.TextField(analyzer="name_ngram", search_analyzer="icu_query"), + "auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"), + }, + ) + + def get_queryset(self) -> QuerySet[Product]: + return ( + super() + .get_queryset() + .filter( + brand__is_active=True, + category__is_active=True, + stocks__vendor__is_active=True, + ) + ) + + class Index(BaseDocument.Index): + name = "products" + + class Django: + model = Product + fields = ["uuid"] + + +add_multilang_fields(ProductDocument) +registry.register_document(ProductDocument) + + +class CategoryDocument(ActiveOnlyMixin, BaseDocument): + priority = fields.IntegerField(attr="priority") + + class Index(BaseDocument.Index): + name = "categories" + + class Django: + model = Category + fields = ["uuid"] + + +add_multilang_fields(CategoryDocument) +registry.register_document(CategoryDocument) + + +class BrandDocument(ActiveOnlyMixin, BaseDocument): + priority = fields.IntegerField(attr="priority") + + class Index(BaseDocument.Index): + name = "brands" + + class Django: + model = Brand + fields = ["uuid"] + + +add_multilang_fields(BrandDocument) +registry.register_document(BrandDocument) + + +class TestModelDocument(Document): # type: ignore [misc] + class Index: + name = "testmodels" + + class Django: + model = TestModel + fields = ["title"] + ignore_signals = True + related_models: list[Any] = [] + auto_refresh = False + + +registry.register_document(TestModelDocument) diff --git a/core/errors.py b/engine/core/errors.py similarity index 100% rename from core/errors.py rename to engine/core/errors.py diff --git a/core/filters.py b/engine/core/filters.py similarity index 60% rename from core/filters.py rename to engine/core/filters.py index 609aee41..dbde2075 100644 --- a/core/filters.py +++ b/engine/core/filters.py @@ -1,6 +1,7 @@ import json import logging import uuid +from typing import Any from django.core.exceptions import BadRequest from django.db.models import ( @@ -9,13 +10,17 @@ from django.db.models import ( Exists, FloatField, IntegerField, + Max, OuterRef, + Prefetch, Q, + QuerySet, Subquery, Value, When, ) from django.db.models.functions import Coalesce +from django.http import HttpRequest from django.utils.http import urlsafe_base64_decode from django.utils.translation import gettext_lazy as _ from django_filters import ( @@ -28,15 +33,17 @@ from django_filters import ( OrderingFilter, UUIDFilter, ) +from graphene import Context +from rest_framework.request import Request -from core.elasticsearch import process_query -from core.models import Address, Brand, Category, Feedback, Order, Product, Wishlist +from engine.core.elasticsearch import process_query +from engine.core.models import Address, Brand, Category, Feedback, Order, Product, Stock, Wishlist -logger = logging.getLogger("evibes") +logger = logging.getLogger(__name__) -class CaseInsensitiveListFilter(BaseInFilter, CharFilter): - def filter(self, qs, value): +class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # type: ignore [misc] + def filter(self, qs: QuerySet[Any], value: Any) -> QuerySet[Any]: if not value: return qs @@ -57,9 +64,11 @@ class CaseInsensitiveListFilter(BaseInFilter, CharFilter): return qs -class ProductFilter(FilterSet): +# noinspection PyUnusedLocal +class ProductFilter(FilterSet): # type: ignore [misc] + search = CharFilter(field_name="name", method="search_products", label=_("Search")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) - name = CharFilter(method="filter_name", label=_("Name")) + name = CharFilter(lookup_expr="icontains", label=_("Name")) categories = CaseInsensitiveListFilter(field_name="category__name", label=_("Categories")) category_uuid = CharFilter(method="filter_category", label="Category (UUID)") categories_slugs = CaseInsensitiveListFilter(field_name="category__slug", label=_("Categories Slugs")) @@ -73,6 +82,11 @@ class ProductFilter(FilterSet): slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) is_digital = BooleanFilter(field_name="is_digital", label=_("Is Digital")) include_subcategories = BooleanFilter(method="filter_include_flag", label=_("Include sub-categories")) + include_personal_ordered = BooleanFilter( + method="filter_include_personal_ordered", + label=_("Include personal ordered"), + ) + sku = CharFilter(field_name="sku", lookup_expr="iexact", label=_("SKU")) order_by = OrderingFilter( fields=( @@ -82,7 +96,8 @@ class ProductFilter(FilterSet): ("slug", "slug"), ("created", "created"), ("modified", "modified"), - ("stocks__price", "price"), + ("price_order", "price"), + ("sku", "sku"), ("?", "random"), ), initial="uuid", @@ -102,6 +117,7 @@ class ProductFilter(FilterSet): "is_active", "tags", "slug", + "sku", "min_price", "max_price", "brand", @@ -109,8 +125,17 @@ class ProductFilter(FilterSet): "order_by", ] - def __init__(self, data=None, queryset=None, *, request=None, prefix=None): + # noinspection PyTypeHints + def __init__( + self, + data: dict[Any, Any] | None = None, + queryset: QuerySet[Product] | None = None, + *, + request: HttpRequest | Request | Context = None, + prefix: str | None = None, + ) -> None: super().__init__(data=data, queryset=queryset, request=request, prefix=prefix) + self._es_rank_applied: bool = False ordering_param = self.data.get("order_by", "") if ordering_param: order_fields = [field.strip("-") for field in ordering_param.split(",")] @@ -121,33 +146,50 @@ class ProductFilter(FilterSet): .annotate(avg_rating=Avg("rating")) .values("avg_rating") ) - self.queryset = self.queryset.annotate( + self.queryset: QuerySet[Product] = self.queryset.annotate( rating=Coalesce( Subquery(feedback_qs, output_field=FloatField()), Value(0, output_field=FloatField()), ) ) + if "price" in order_fields: + self.queryset = self.queryset.annotate( + price_order=Coalesce( + Max("stocks__price"), + Value(0.0), + output_field=FloatField(), + ) + ) - def filter_name(self, queryset, _name, value): - search_results = process_query(query=value, request=self.request)["products"] - uuids = [res["uuid"] for res in search_results if res.get("uuid")] + def search_products(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: + if not value: + return queryset + es_products = process_query(query=value, indexes=("products",)) # type: ignore + uuids = [p.get("uuid") for p in (es_products or {}).get("products", [])][:33] if not uuids: return queryset.none() - ordering = Case( - *[When(uuid=uuid_, then=pos) for pos, uuid_ in enumerate(uuids)], - output_field=IntegerField(), + # Preserve ES order using a CASE expression + when_statements = [When(uuid=u, then=pos) for pos, u in enumerate(uuids)] + queryset = queryset.filter(uuid__in=uuids).annotate( + es_rank=Case(*when_statements, default=Value(9999), output_field=IntegerField()) ) + # Mark that ES ranking is applied, qs() will order appropriately + self._es_rank_applied = True + return queryset - return queryset.filter(uuid__in=uuids).annotate(_order=ordering).order_by("_order") - - def filter_include_flag(self, queryset, **_kwargs): + def filter_include_flag(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if not self.data.get("category_uuid"): raise BadRequest(_("there must be a category_uuid to use include_subcategories flag")) return queryset - def filter_attributes(self, queryset, _name, value): + def filter_include_personal_ordered(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: + if self.data.get("include_personal_ordered", False): + queryset = queryset.filter(stocks__isnull=False, stocks__quantity__gt=0, stocks__price__gt=0) + return queryset + + def filter_attributes(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if not value: return queryset @@ -209,7 +251,7 @@ class ProductFilter(FilterSet): return queryset - def filter_category(self, queryset, _name, value): + def filter_category(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if not value: return queryset @@ -228,7 +270,7 @@ class ProductFilter(FilterSet): return queryset.filter(category__uuid=value) @staticmethod - def _infer_type(value): + def _infer_type(value: str) -> Any: try: parsed_value = json.loads(value) if isinstance(parsed_value, list | dict): @@ -252,29 +294,60 @@ class ProductFilter(FilterSet): return value @property - def qs(self): + def qs(self) -> QuerySet[Product]: qs = super().qs ordering_param = self.data.get("order_by", "") - if ordering_param: - order_fields = [field.strip() for field in ordering_param.split(",")] - if any(field.lstrip("-") == "rating" for field in order_fields): - feedback_qs = ( - Feedback.objects.filter(order_product__product_id=OuterRef("pk")) - .values("order_product__product_id") - .annotate(avg_rating=Avg("rating")) - .values("avg_rating") - ) - qs = qs.annotate( - rating=Coalesce( - Subquery(feedback_qs, output_field=FloatField()), - Value(0, output_field=FloatField()), - ) - ) + + stock_with_price = Stock.objects.filter(product_id=OuterRef("pk"), price__gt=0) + stock_with_qty = Stock.objects.filter(product_id=OuterRef("pk"), quantity__gt=0) + + qs = qs.annotate( + has_price=Exists(stock_with_price), + has_stock=Exists(stock_with_qty), + ).annotate( + personal_order_tail=Case( + When(Q(has_price=False) | Q(has_stock=False), then=Value(1)), + default=Value(0), + output_field=IntegerField(), + ) + ) + + requested = [part.strip() for part in ordering_param.split(",") if part.strip()] if ordering_param else [] + mapped_requested: list[str] = [] + + for part in requested: + desc = part.startswith("-") + key = part.lstrip("-") + + if key == "price": + key = "price_order" + + if key == "random": + mapped_requested.append("?") + continue + + if key in {"personal_orders_only", "personal_order_only", "personal_order_tail"}: + continue + + mapped_requested.append(f"-{key}" if desc else key) + + if "?" in mapped_requested: + final_ordering = ["personal_order_tail", "?"] + else: + if getattr(self, "_es_rank_applied", False): + final_ordering = ["personal_order_tail", "es_rank"] + mapped_requested + else: + final_ordering = ["personal_order_tail"] + mapped_requested + + if final_ordering: + qs = qs.order_by(*final_ordering) + return qs.distinct() -class OrderFilter(FilterSet): +# noinspection PyUnusedLocal +class OrderFilter(FilterSet): # type: ignore [misc] search = CharFilter( method="filter_search", label=_("Search (ID, product name or part number)"), @@ -321,7 +394,7 @@ class OrderFilter(FilterSet): "max_buy_time", ] - def filter_search(self, queryset, _name, value): + def filter_search(self, queryset: QuerySet[Order], name: str, value: str): return queryset.filter( Q(human_readable_id__icontains=value) | Q(order_products__product__name__icontains=value) @@ -329,7 +402,7 @@ class OrderFilter(FilterSet): ).distinct() -class WishlistFilter(FilterSet): +class WishlistFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) user = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) @@ -348,9 +421,11 @@ class WishlistFilter(FilterSet): fields = ["uuid", "user_email", "user", "order_by"] -class CategoryFilter(FilterSet): +# noinspection PyUnusedLocal +class CategoryFilter(FilterSet): # type: ignore [misc] + search = CharFilter(field_name="name", method="search_categories", label=_("Search")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") - name = CharFilter(method="filter_name", label=_("Name")) + name = CharFilter(lookup_expr="icontains", label=_("Name")) parent_uuid = CharFilter(method="filter_parent_uuid", label=_("Parent")) slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) whole = BooleanFilter( @@ -361,13 +436,7 @@ class CategoryFilter(FilterSet): tags = CaseInsensitiveListFilter(field_name="tags__tag_name", label=_("Tags")) level = NumberFilter(field_name="level", lookup_expr="exact", label=_("Level")) - order_by = OrderingFilter( - fields=( - ("uuid", "uuid"), - ("name", "name"), - ("?", "random"), - ) - ) + order_by = CharFilter(method="filter_order_by") class Meta: model = Category @@ -382,21 +451,77 @@ class CategoryFilter(FilterSet): "whole", ] - def filter_name(self, queryset, _name, value): - search_results = process_query(query=value, request=self.request)["categories"] - uuids = [res["uuid"] for res in search_results if res.get("uuid")] + def search_categories(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]: + if not value: + return queryset - if not uuids: - return queryset.none() + uuids = [category.get("uuid") for category in process_query(query=value, indexes=("categories",))["categories"]] # type: ignore - ordering = Case( - *[When(uuid=uuid_, then=pos) for pos, uuid_ in enumerate(uuids)], - output_field=IntegerField(), - ) + return queryset.filter(uuid__in=uuids) - return queryset.filter(uuid__in=uuids).annotate(_order=ordering).order_by("_order") + def filter_order_by(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]: + if not value: + return queryset - def filter_whole_categories(self, queryset, _name, value): + desc = value.startswith("-") + key = value.lstrip("-") + + mapping = { + "priority": "priority", + "uuid": "uuid", + "name": "name", + "?": "random", + } + field = mapping.get(key) + if field is None: + return queryset + + if field == "?": + order_expression = "?" + else: + order_expression = f"-{field}" if desc else field + + qs = queryset.order_by(order_expression).prefetch_related(None) + + def create_ordered_tree_prefetch(max_depth=10) -> Prefetch | None: + if field == "?": + + def build_random_prefetch(depth): + if depth <= 0: + return None + + children_qs = Category.objects.all().order_by("?") + nested_prefetch = build_random_prefetch(depth - 1) + + if nested_prefetch: + children_qs = children_qs.prefetch_related(nested_prefetch) + + return Prefetch("children", queryset=children_qs) + + return build_random_prefetch(max_depth) + else: + + def build_ordered_prefetch(depth): + if depth <= 0: + return None + + children_qs = Category.objects.all().order_by(order_expression, "tree_id", "lft") + nested_prefetch = build_ordered_prefetch(depth - 1) + + if nested_prefetch: + children_qs = children_qs.prefetch_related(nested_prefetch) + + return Prefetch("children", queryset=children_qs) + + return build_ordered_prefetch(max_depth) + + tree_prefetch = create_ordered_tree_prefetch() + if tree_prefetch: + qs = qs.prefetch_related(tree_prefetch) + + return qs + + def filter_whole_categories(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]: has_own_products = Exists(Product.objects.filter(category=OuterRef("pk"))) has_desc_products = Exists( Product.objects.filter( @@ -411,7 +536,7 @@ class CategoryFilter(FilterSet): return annotated.filter(has_products=True).distinct() return annotated.filter(has_products=False).distinct() - def filter_parent_uuid(self, queryset, _name, value): + def filter_parent_uuid(self, queryset: QuerySet[Category], name: str, value: str): if value in ("", "null", "None"): return queryset.filter(parent=None) @@ -423,14 +548,19 @@ class CategoryFilter(FilterSet): return queryset.filter(parent__uuid=uuid_val) -class BrandFilter(FilterSet): +# noinspection PyUnusedLocal +class BrandFilter(FilterSet): # type: ignore [misc] + search = CharFilter(field_name="name", method="search_brands", label=_("Search")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") - name = CharFilter(method="filter_name", label=_("Name")) + name = CharFilter(lookup_expr="icontains", label=_("Name")) + slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) categories = CaseInsensitiveListFilter(field_name="categories__uuid", lookup_expr="exact", label=_("Categories")) order_by = OrderingFilter( fields=( + ("priority", "priority"), ("uuid", "uuid"), + ("slug", "slug"), ("name", "name"), ("?", "random"), ) @@ -438,24 +568,18 @@ class BrandFilter(FilterSet): class Meta: model = Brand - fields = ["uuid", "name"] + fields = ["uuid", "name", "slug", "priority"] - def filter_name(self, queryset, _name, value): - search_results = process_query(query=value, request=self.request)["brands"] - uuids = [res["uuid"] for res in search_results if res.get("uuid")] + def search_brands(self, queryset: QuerySet[Brand], name: str, value: str) -> QuerySet[Brand]: + if not value: + return queryset - if not uuids: - return queryset.none() + uuids = [brand.get("uuid") for brand in process_query(query=value, indexes=("brands",))["brands"]] # type: ignore - ordering = Case( - *[When(uuid=uuid_, then=pos) for pos, uuid_ in enumerate(uuids)], - output_field=IntegerField(), - ) - - return queryset.filter(uuid__in=uuids).annotate(_order=ordering).order_by("_order") + return queryset.filter(uuid__in=uuids) -class FeedbackFilter(FilterSet): +class FeedbackFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) product_uuid = UUIDFilter( field_name="order_product__product__uuid", @@ -484,7 +608,7 @@ class FeedbackFilter(FilterSet): fields = ["uuid", "product_uuid", "user_uuid", "order_by"] -class AddressFilter(FilterSet): +class AddressFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) user_uuid = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) diff --git a/payments/static/.gitkeep b/engine/core/fixtures/.gitkeep similarity index 100% rename from payments/static/.gitkeep rename to engine/core/fixtures/.gitkeep diff --git a/engine/core/fixtures/initialization.json b/engine/core/fixtures/initialization.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/engine/core/fixtures/initialization.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/core/forms.py b/engine/core/forms.py similarity index 69% rename from core/forms.py rename to engine/core/forms.py index 97f7b94f..99e1401f 100644 --- a/core/forms.py +++ b/engine/core/forms.py @@ -22,6 +22,16 @@ class VendorForm(forms.ModelForm): } +class CRMForm(forms.ModelForm): + class Meta: + model = Product + fields = "__all__" + widgets = { + "authentication": JSONTableWidget(), + "attributes": JSONTableWidget(), + } + + class OrderProductForm(forms.ModelForm): class Meta: model = OrderProduct @@ -32,6 +42,15 @@ class OrderProductForm(forms.ModelForm): } +class StockForm(forms.ModelForm): + class Meta: + model = Product + fields = "__all__" + widgets = { + "system_attributes": JSONTableWidget(), + } + + class OrderForm(forms.ModelForm): class Meta: model = Order diff --git a/engine/core/graphene/__init__.py b/engine/core/graphene/__init__.py new file mode 100644 index 00000000..382eefd7 --- /dev/null +++ b/engine/core/graphene/__init__.py @@ -0,0 +1,12 @@ +from typing import Any + +from graphene import Mutation + + +class BaseMutation(Mutation): # type: ignore [misc] + def __init__(self, *args: list[Any], **kwargs: dict[Any, Any]) -> None: + super().__init__(*args, **kwargs) + + @staticmethod + def mutate(**kwargs: Any) -> None: + pass diff --git a/core/templates/__init__.py b/engine/core/graphene/dashboard_mutations/__init__.py similarity index 100% rename from core/templates/__init__.py rename to engine/core/graphene/dashboard_mutations/__init__.py diff --git a/engine/core/graphene/dashboard_mutations/product.py b/engine/core/graphene/dashboard_mutations/product.py new file mode 100644 index 00000000..0bbc97af --- /dev/null +++ b/engine/core/graphene/dashboard_mutations/product.py @@ -0,0 +1,179 @@ +from contextlib import suppress + +from django.core.exceptions import PermissionDenied +from django.utils.translation import gettext_lazy as _ +from graphene import UUID, Boolean, Field, InputObjectType, List, NonNull, String + +from engine.core.graphene import BaseMutation +from engine.core.graphene.object_types import ProductType +from engine.core.models import ( + Attribute, + AttributeGroup, + AttributeValue, + Brand, + Category, + Product, + ProductTag, +) +from engine.core.utils.messages import permission_denied_message + + +def resolve_attributes(product, attributes): + for attr_input in attributes: + attribute = None + attr_uuid = attr_input.get("attribute_uuid") + if attr_uuid: + with suppress(Attribute.DoesNotExist): + attribute = Attribute.objects.get(uuid=attr_uuid) + if attribute is None: + group_name = attr_input.get("group_name") + attribute_name = attr_input.get("attribute_name") + value_type = attr_input.get("value_type") or "string" + if group_name and attribute_name: + group, _ = AttributeGroup.objects.get_or_create(name=group_name) + attribute, _ = Attribute.objects.get_or_create( + group=group, + name=attribute_name, + defaults={"value_type": value_type}, + ) + if attribute.value_type != value_type: + attribute.value_type = value_type + attribute.save(update_fields=["value_type"]) + if attribute is not None: + AttributeValue.objects.update_or_create( + product=product, + attribute=attribute, + defaults={"value": str(attr_input.get("value", ""))}, + ) + + +def resolve_tags(product, tag_uuids): + tags = list(ProductTag.objects.filter(uuid__in=tag_uuids)) + if tags: + product.tags.set(tags) + + +class AttributeInput(InputObjectType): # type: ignore[misc] + attribute_uuid = UUID(required=False, name="attributeUuid") + group_name = String(required=False, name="groupName") + attribute_name = String(required=False, name="attributeName") + value_type = String(required=False, name="valueType") + value = String(required=True) + + +class ProductInput(InputObjectType): # type: ignore[misc] + name = NonNull(String) + description = String(required=False) + is_digital = Boolean(required=False, name="isDigital") + partnumber = String(required=False) + sku = String(required=False) + + category_uuid = NonNull(UUID, name="categoryUuid") + brand_uuid = UUID(required=False, name="brandUuid") + tag_uuids = List(UUID, required=False, name="tagUuids") + attributes = List(NonNull(AttributeInput), required=False) + + +# noinspection PyUnusedLocal,PyTypeChecker +class CreateProduct(BaseMutation): + class Meta: + description = _("create a product") + + class Arguments: + product_data = NonNull(ProductInput, name="productData") + + product = Field(ProductType) + + @staticmethod + def mutate(parent, info, product_data): # type: ignore [override] + user = info.context.user + if not user.has_perm("core.add_product"): + raise PermissionDenied(permission_denied_message) + category = Category.objects.get(uuid=product_data["category_uuid"]) # type: ignore[index] + brand = None + if product_data.get("brand_uuid"): + with suppress(Brand.DoesNotExist): # type: ignore[name-defined] + brand = Brand.objects.get(uuid=product_data["brand_uuid"]) # type: ignore[index] + + product = Product.objects.create( + name=product_data["name"], + description=product_data.get("description"), + is_digital=product_data.get("is_digital") or False, + partnumber=product_data.get("partnumber"), + sku=product_data.get("sku") or None, + category=category, + brand=brand, + ) + + resolve_tags(product, product_data.get("tag_uuids", [])) + + resolve_attributes(product, product_data.get("attributes", [])) + + return CreateProduct(product=product) + + +# noinspection PyUnusedLocal,PyTypeChecker +class UpdateProduct(BaseMutation): + class Meta: + description = _("create a product") + + class Arguments: + product_uuid = UUID(required=True) + product_data = NonNull(ProductInput, name="productData") + + product = Field(ProductType) + + @staticmethod + def mutate(parent, info, product_uuid, product_data): # type: ignore [override] + user = info.context.user + if not user.has_perm("core.change_product"): + raise PermissionDenied(permission_denied_message) + product = Product.objects.get(uuid=product_uuid) + + updates = {} + for field_in, model_field in ( + ("name", "name"), + ("description", "description"), + ("is_digital", "is_digital"), + ("partnumber", "partnumber"), + ("sku", "sku"), + ): + if field_in in product_data and product_data[field_in] is not None: + updates[model_field] = product_data[field_in] + + if product_data.get("category_uuid"): + product.category = Category.objects.get(uuid=product_data["category_uuid"]) # type: ignore[index] + if product_data.get("brand_uuid") is not None: + if product_data.get("brand_uuid"): + product.brand = Brand.objects.get(uuid=product_data["brand_uuid"]) # type: ignore[index] + else: + product.brand = None + + for k, v in updates.items(): + setattr(product, k, v) + product.save() + + resolve_tags(product, product_data.get("tag_uuids", [])) + + resolve_attributes(product, product_data.get("attributes")) + + return UpdateProduct(product=product) + + +# noinspection PyUnusedLocal,PyTypeChecker +class DeleteProduct(BaseMutation): + class Meta: + description = _("create a product") + + class Arguments: + product_uuid = UUID(required=True) + + ok = Boolean() + + @staticmethod + def mutate(parent, info, product_uuid): # type: ignore [override] + user = info.context.user + if not user.has_perm("core.delete_product"): + raise PermissionDenied(permission_denied_message) + Product.objects.get(uuid=product_uuid).delete() + return DeleteProduct(ok=True) diff --git a/core/graphene/mutations.py b/engine/core/graphene/mutations.py similarity index 69% rename from core/graphene/mutations.py rename to engine/core/graphene/mutations.py index c0ecc194..3078aaa0 100644 --- a/core/graphene/mutations.py +++ b/engine/core/graphene/mutations.py @@ -1,4 +1,5 @@ import logging +from typing import Any import requests from django.core.cache import cache @@ -9,27 +10,28 @@ from graphene import UUID, Boolean, Field, Int, List, String from graphene.types.generic import GenericScalar from graphene_django.utils import camelize -from core.elasticsearch import process_query -from core.graphene import BaseMutation -from core.graphene.object_types import ( +from engine.core.elasticsearch import process_query +from engine.core.graphene import BaseMutation +from engine.core.graphene.object_types import ( AddressType, - BulkActionOrderProductInput, + BulkProductInput, + FeedbackType, OrderType, - ProductType, SearchResultsType, WishlistType, ) -from core.models import Address, Category, Order, Product, Wishlist -from core.utils import format_attributes, is_url_safe -from core.utils.caching import web_cache -from core.utils.emailing import contact_us_email -from core.utils.messages import permission_denied_message -from core.utils.nominatim import fetch_address_suggestions -from payments.graphene.object_types import TransactionType +from engine.core.models import Address, Order, OrderProduct, Wishlist +from engine.core.utils import format_attributes, is_url_safe +from engine.core.utils.caching import web_cache +from engine.core.utils.emailing import contact_us_email +from engine.core.utils.messages import permission_denied_message +from engine.core.utils.nominatim import fetch_address_suggestions +from engine.payments.graphene.object_types import TransactionType -logger = logging.getLogger("evibes") +logger = logging.getLogger(__name__) +# noinspection PyUnusedLocal class CacheOperator(BaseMutation): class Meta: description = _("cache I/O") @@ -45,10 +47,11 @@ class CacheOperator(BaseMutation): data = GenericScalar(description=_("cached data")) @staticmethod - def mutate(_parent, info, key, data=None, timeout=None): + def mutate(parent, info, key, data=None, timeout=None) -> dict[Any, Any]: # type: ignore [override] return camelize(web_cache(info.context, key, data, timeout)) +# noinspection PyUnusedLocal class RequestCursedURL(BaseMutation): class Meta: description = _("request a CORSed URL") @@ -59,7 +62,7 @@ class RequestCursedURL(BaseMutation): data = GenericScalar(description=_("camelized JSON data from the requested URL")) @staticmethod - def mutate(_parent, info, url): + def mutate(parent, info, url) -> dict[str, Any]: # type: ignore [override] if not is_url_safe(url): raise BadRequest(_("only URLs starting with http(s):// are allowed")) try: @@ -74,6 +77,7 @@ class RequestCursedURL(BaseMutation): return {"data": {"error": str(e)}} +# noinspection PyUnusedLocal,PyTypeChecker class AddOrderProduct(BaseMutation): class Meta: description = _("add a product to the order") @@ -86,7 +90,7 @@ class AddOrderProduct(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, product_uuid, order_uuid, attributes=None): + def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override] user = info.context.user try: order = Order.objects.get(uuid=order_uuid) @@ -96,10 +100,11 @@ class AddOrderProduct(BaseMutation): order = order.add_product(product_uuid=product_uuid, attributes=format_attributes(attributes)) return AddOrderProduct(order=order) - except Order.DoesNotExist: - raise Http404(_(f"order {order_uuid} not found")) + except Order.DoesNotExist as dne: + raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class RemoveOrderProduct(BaseMutation): class Meta: description = _("remove a product from the order") @@ -112,7 +117,7 @@ class RemoveOrderProduct(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, product_uuid, order_uuid, attributes=None): + def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override] user = info.context.user try: order = Order.objects.get(uuid=order_uuid) @@ -121,11 +126,12 @@ class RemoveOrderProduct(BaseMutation): order = order.remove_product(product_uuid=product_uuid, attributes=format_attributes(attributes)) - return AddOrderProduct(order=order) - except Order.DoesNotExist: - raise Http404(_(f"order {order_uuid} not found")) + return RemoveOrderProduct(order=order) + except Order.DoesNotExist as dne: + raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class RemoveAllOrderProducts(BaseMutation): class Meta: description = _("remove all products from the order") @@ -136,7 +142,7 @@ class RemoveAllOrderProducts(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, order_uuid): + def mutate(parent, info, order_uuid): # type: ignore [override] user = info.context.user order = Order.objects.get(uuid=order_uuid) if not (user.has_perm("core.delete_orderproduct") or user == order.user): @@ -147,6 +153,7 @@ class RemoveAllOrderProducts(BaseMutation): return RemoveAllOrderProducts(order=order) +# noinspection PyUnusedLocal,PyTypeChecker class RemoveOrderProductsOfAKind(BaseMutation): class Meta: description = _("remove a product from the order") @@ -158,7 +165,7 @@ class RemoveOrderProductsOfAKind(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, product_uuid, order_uuid): + def mutate(parent, info, product_uuid, order_uuid): # type: ignore [override] user = info.context.user order = Order.objects.get(uuid=order_uuid) if not (user.has_perm("core.delete_orderproduct") or user == order.user): @@ -169,25 +176,27 @@ class RemoveOrderProductsOfAKind(BaseMutation): return RemoveOrderProductsOfAKind(order=order) +# noinspection PyUnusedLocal,PyTypeChecker class BuyOrder(BaseMutation): class Meta: description = _("buy an order") class Arguments: - order_uuid = UUID(required=False) + order_uuid = String(required=False) order_hr_id = String(required=False) force_balance = Boolean(required=False) force_payment = Boolean(required=False) - promocode_uuid = UUID(required=False) - shipping_address = UUID(required=False) - billing_address = UUID(required=False) + promocode_uuid = String(required=False) + shipping_address = String(required=False) + billing_address = String(required=False) + chosen_products = List(BulkProductInput, required=False) order = Field(OrderType, required=False) transaction = Field(TransactionType, required=False) @staticmethod def mutate( - _parent, + parent, info, order_uuid=None, order_hr_id=None, @@ -196,7 +205,8 @@ class BuyOrder(BaseMutation): promocode_uuid=None, shipping_address=None, billing_address=None, - ): + chosen_products=None, + ): # type: ignore [override] if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]): raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive")) user = info.context.user @@ -214,20 +224,22 @@ class BuyOrder(BaseMutation): promocode_uuid=promocode_uuid, shipping_address=shipping_address, billing_address=billing_address, + chosen_products=chosen_products, ) match str(type(instance)): - case "": + case "": return BuyOrder(transaction=instance) - case "": + case "": return BuyOrder(order=instance) case _: raise TypeError(_(f"wrong type came from order.buy() method: {type(instance)!s}")) - except Order.DoesNotExist: - raise Http404(_(f"order {order_uuid} not found")) + except Order.DoesNotExist as dne: + raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class BulkOrderAction(BaseMutation): class Meta: description = _("perform an action on a list of products in the order") @@ -236,19 +248,19 @@ class BulkOrderAction(BaseMutation): order_uuid = UUID(required=False) order_hr_id = String(required=False) action = String(required=True, description=_("remove/add")) - products = List(BulkActionOrderProductInput, required=True) + products = List(BulkProductInput, required=True) order = Field(OrderType, required=False) @staticmethod def mutate( - _parent, + parent, info, action, products, order_uuid=None, order_hr_id=None, - ): + ): # type: ignore [override] if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]): raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive")) user = info.context.user @@ -271,10 +283,52 @@ class BulkOrderAction(BaseMutation): return BulkOrderAction(order=order) - except Order.DoesNotExist: - raise Http404(_(f"order {order_uuid} not found")) + except Order.DoesNotExist as dne: + raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker +class BulkWishlistAction(BaseMutation): + class Meta: + description = _("perform an action on a list of products in the wishlist") + + class Arguments: + wishlist_uuid = UUID(required=False) + action = String(required=True, description="remove/add") + products = List(BulkProductInput, required=True) + + wishlist = Field(WishlistType, required=False) + + @staticmethod + def mutate( + parent, + info, + action, + products, + wishlist_uuid=None, + ): # type: ignore [override] + if not wishlist_uuid: + raise BadRequest(_("please provide wishlist_uuid value")) + user = info.context.user + try: + wishlist = Wishlist.objects.get(user=user, uuid=wishlist_uuid) + + # noinspection PyUnreachableCode + match action: + case "add": + wishlist = wishlist.bulk_add_products(products) + case "remove": + wishlist = wishlist.bulk_remove_products(products) + case _: + raise BadRequest(_("action must be either add or remove")) + + return BulkWishlistAction(wishlist=wishlist) + + except Wishlist.DoesNotExist as dne: + raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne + + +# noinspection PyUnusedLocal class BuyUnregisteredOrder(BaseMutation): class Meta: description = _("purchase an order without account creation") @@ -294,7 +348,7 @@ class BuyUnregisteredOrder(BaseMutation): @staticmethod def mutate( - _parent, + parent, info, products, customer_name, @@ -305,7 +359,7 @@ class BuyUnregisteredOrder(BaseMutation): customer_shipping_address=None, promocode_uuid=None, is_business=False, - ): + ): # type: ignore [override] order = Order.objects.create(status="MOMENTAL") transaction = order.buy_without_registration( products=products, @@ -318,9 +372,11 @@ class BuyUnregisteredOrder(BaseMutation): payment_method=payment_method, is_business=is_business, ) + # noinspection PyTypeChecker return BuyUnregisteredOrder(transaction=transaction) +# noinspection PyUnusedLocal,PyTypeChecker class AddWishlistProduct(BaseMutation): class Meta: description = _("add a product to the wishlist") @@ -332,7 +388,7 @@ class AddWishlistProduct(BaseMutation): wishlist = Field(WishlistType) @staticmethod - def mutate(_parent, info, product_uuid, wishlist_uuid): + def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -344,10 +400,11 @@ class AddWishlistProduct(BaseMutation): return AddWishlistProduct(wishlist=wishlist) - except Wishlist.DoesNotExist: - raise Http404(_(f"wishlist {wishlist_uuid} not found")) + except Wishlist.DoesNotExist as dne: + raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class RemoveWishlistProduct(BaseMutation): class Meta: description = _("remove a product from the wishlist") @@ -359,7 +416,7 @@ class RemoveWishlistProduct(BaseMutation): wishlist = Field(WishlistType) @staticmethod - def mutate(_parent, info, product_uuid, wishlist_uuid): + def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -371,10 +428,11 @@ class RemoveWishlistProduct(BaseMutation): return RemoveWishlistProduct(wishlist=wishlist) - except Wishlist.DoesNotExist: - raise Http404(_(f"wishlist {wishlist_uuid} not found")) + except Wishlist.DoesNotExist as dne: + raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class RemoveAllWishlistProducts(BaseMutation): class Meta: description = _("remove all products from the wishlist") @@ -385,7 +443,7 @@ class RemoveAllWishlistProducts(BaseMutation): wishlist = Field(WishlistType) @staticmethod - def mutate(_parent, info, wishlist_uuid): + def mutate(parent, info, wishlist_uuid): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -398,10 +456,11 @@ class RemoveAllWishlistProducts(BaseMutation): return RemoveAllWishlistProducts(wishlist=wishlist) - except Wishlist.DoesNotExist: - raise Http404(_(f"wishlist {wishlist_uuid} not found")) + except Wishlist.DoesNotExist as dne: + raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class BuyWishlist(BaseMutation): class Meta: description = _("buy all products from the wishlist") @@ -415,7 +474,7 @@ class BuyWishlist(BaseMutation): transaction = Field(TransactionType, required=False) @staticmethod - def mutate(_parent, info, wishlist_uuid, force_balance=False, force_payment=False): + def mutate(parent, info, wishlist_uuid, force_balance=False, force_payment=False): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -434,17 +493,18 @@ class BuyWishlist(BaseMutation): instance = order.buy(force_balance=force_balance, force_payment=force_payment) match str(type(instance)): - case "": + case "": return BuyWishlist(transaction=instance) - case "": + case "": return BuyWishlist(order=instance) case _: raise TypeError(_(f"wrong type came from order.buy() method: {type(instance)!s}")) - except Wishlist.DoesNotExist: - raise Http404(_(f"wishlist {wishlist_uuid} not found")) + except Wishlist.DoesNotExist as dne: + raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class BuyProduct(BaseMutation): class Meta: description = _("buy a product") @@ -463,84 +523,60 @@ class BuyProduct(BaseMutation): @staticmethod def mutate( - _parent, + parent, info, product_uuid, attributes=None, force_balance=False, force_payment=False, - ): + ): # type: ignore [override] user = info.context.user order = Order.objects.create(user=user, status="MOMENTAL") order.add_product(product_uuid=product_uuid, attributes=format_attributes(attributes)) instance = order.buy(force_balance=force_balance, force_payment=force_payment) match str(type(instance)): - case "": + case "": return BuyProduct(transaction=instance) - case "": + case "": return BuyProduct(order=instance) case _: raise TypeError(_(f"wrong type came from order.buy() method: {type(instance)!s}")) -class CreateProduct(BaseMutation): - class Arguments: - name = String(required=True) - description = String() - category_uuid = UUID(required=True) +# noinspection PyUnusedLocal,PyTypeChecker +class FeedbackProductAction(BaseMutation): + class Meta: + description = _("add or delete a feedback for orderproduct") - product = Field(ProductType) + class Arguments: + order_product_uuid = UUID(required=True) + action = String(required=True, description="add/remove") + comment = String(required=False) + rating = Int(required=False) + + feedback = Field(FeedbackType, required=False) @staticmethod - def mutate(_parent, info, name, category_uuid, description=None): - if not info.context.user.has_perm("core.add_product"): - raise PermissionDenied(permission_denied_message) - category = Category.objects.get(uuid=category_uuid) - product = Product.objects.create(name=name, description=description, category=category) - return CreateProduct(product=product) - - -class UpdateProduct(BaseMutation): - class Arguments: - uuid = UUID(required=True) - name = String() - description = String() - category_uuid = UUID() - - product = Field(ProductType) - - @staticmethod - def mutate(_parent, info, uuid, name=None, description=None, category_uuid=None): + def mutate(parent, info, order_product_uuid, action, comment=None, rating=None): # type: ignore [override] user = info.context.user - if not user.has_perm("core.change_product"): - raise PermissionDenied(permission_denied_message) - product = Product.objects.get(uuid=uuid) - if name: - product.name = name - if description: - product.description = description - if category_uuid: - product.category = Category.objects.get(uuid=category_uuid) - product.save() - return UpdateProduct(product=product) - - -class DeleteProduct(BaseMutation): - class Arguments: - uuid = UUID(required=True) - - ok = Boolean() - - @staticmethod - def mutate(_parent, info, uuid): - user = info.context.user - if not user.has_perm("core.delete_product"): - raise PermissionDenied(permission_denied_message) - product = Product.objects.get(uuid=uuid) - product.delete() - return DeleteProduct(ok=True) + try: + order_product = OrderProduct.objects.get(uuid=order_product_uuid) + if user != order_product.order.user: + raise PermissionDenied(permission_denied_message) + feedback = None + match action: + case "add": + feedback = order_product.do_feedback(comment=comment, rating=rating, action="add") + case "remove": + feedback = order_product.do_feedback(action="remove") + case _: + raise BadRequest(_("action must be either `add` or `remove`")) + return FeedbackProductAction(feedback=feedback) + except OrderProduct.DoesNotExist as dne: + raise Http404(_(f"order product {order_product_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class CreateAddress(BaseMutation): class Arguments: raw_data = String(required=True, description=_("original address string provided by the user")) @@ -548,13 +584,14 @@ class CreateAddress(BaseMutation): address = Field(AddressType) @staticmethod - def mutate(_parent, info, raw_data): + def mutate(parent, info, raw_data): # type: ignore [override] user = info.context.user if info.context.user.is_authenticated else None address = Address.objects.create(raw_data=raw_data, user=user) return CreateAddress(address=address) +# noinspection PyUnusedLocal class DeleteAddress(BaseMutation): class Arguments: uuid = UUID(required=True) @@ -562,7 +599,7 @@ class DeleteAddress(BaseMutation): success = Boolean() @staticmethod - def mutate(_parent, info, uuid): + def mutate(parent, info, uuid): # type: ignore [override] try: address = Address.objects.get(uuid=uuid) if ( @@ -571,15 +608,17 @@ class DeleteAddress(BaseMutation): or info.context.user == address.user ): address.delete() + # noinspection PyTypeChecker return DeleteAddress(success=True) raise PermissionDenied(permission_denied_message) - except Address.DoesNotExist: + except Address.DoesNotExist as dne: name = "Address" - raise Http404(_(f"{name} does not exist: {uuid}")) + raise Http404(_(f"{name} does not exist: {uuid}")) from dne +# noinspection PyUnusedLocal class AutocompleteAddress(BaseMutation): class Arguments: q = String() @@ -588,7 +627,7 @@ class AutocompleteAddress(BaseMutation): suggestions = GenericScalar() @staticmethod - def mutate(_parent, info, q, limit): + def mutate(parent, info, q, limit): # type: ignore [override] if 1 > limit > 10: raise BadRequest(_("limit must be between 1 and 10")) try: @@ -596,9 +635,11 @@ class AutocompleteAddress(BaseMutation): except Exception as e: raise BadRequest(f"geocoding error: {e!s}") from e + # noinspection PyTypeChecker return AutocompleteAddress(suggestions=suggestions) +# noinspection PyUnusedLocal class ContactUs(BaseMutation): class Arguments: email = String(required=True) @@ -611,7 +652,7 @@ class ContactUs(BaseMutation): error = String() @staticmethod - def mutate(_parent, info, email, name, subject, message, phone_number=None): + def mutate(parent, info, email, name, subject, message, phone_number=None): # type: ignore [override] try: contact_us_email.delay( { @@ -622,12 +663,14 @@ class ContactUs(BaseMutation): "message": message, } ) + # noinspection PyTypeChecker return ContactUs(received=True) except Exception as e: + # noinspection PyTypeChecker return ContactUs(received=False, error=str(e)) -# noinspection PyArgumentList +# noinspection PyArgumentList PyUnusedLocal class Search(BaseMutation): class Arguments: query = String(required=True) @@ -638,9 +681,10 @@ class Search(BaseMutation): description = _("elasticsearch - works like a charm") @staticmethod - def mutate(_parent, info, query): + def mutate(parent, info, query): # type: ignore [override] data = process_query(query=query, request=info.context) + # noinspection PyTypeChecker return Search( results=SearchResultsType( products=data["products"], diff --git a/core/graphene/object_types.py b/engine/core/graphene/object_types.py similarity index 58% rename from core/graphene/object_types.py rename to engine/core/graphene/object_types.py index ef27b4b3..aab912c2 100644 --- a/core/graphene/object_types.py +++ b/engine/core/graphene/object_types.py @@ -1,9 +1,14 @@ +import logging +from contextlib import suppress +from typing import Any + +from django.conf import settings from django.core.cache import cache -from django.db.models import Max, Min -from django.db.models.functions import Length +from django.db.models import Max, Min, QuerySet from django.utils.translation import gettext_lazy as _ from graphene import ( UUID, + Boolean, Field, Float, InputObjectType, @@ -20,7 +25,7 @@ from graphene_django.filter import DjangoFilterConnectionField from graphene_django.utils import camelize from mptt.querysets import TreeQuerySet -from core.models import ( +from engine.core.models import ( Address, Attribute, AttributeGroup, @@ -40,11 +45,33 @@ from core.models import ( Vendor, Wishlist, ) +from engine.core.utils import graphene_abs, graphene_current_lang +from engine.core.utils.seo_builders import ( + brand_schema, + breadcrumb_schema, + category_schema, + item_list_schema, + org_schema, + product_schema, + website_schema, +) +from engine.payments.graphene.object_types import TransactionType -logger = __import__("logging").getLogger(__name__) +logger = logging.getLogger(__name__) -class AttributeType(DjangoObjectType): +class SEOMetaType(ObjectType): # type: ignore [misc] + title = String() + description = String() + canonical = String() + robots = String() + open_graph = GenericScalar() + twitter = GenericScalar() + json_ld = List(GenericScalar) + hreflang = String() + + +class AttributeType(DjangoObjectType): # type: ignore [misc] values = List(lambda: AttributeValueType, description=_("attribute values")) class Meta: @@ -54,7 +81,7 @@ class AttributeType(DjangoObjectType): filter_fields = ["uuid"] description = _("attributes") - def resolve_values(self, info): + def resolve_values(self, info) -> QuerySet[AttributeValue]: base_qs = AttributeValue.objects.filter(attribute=self) product_uuid = getattr(info.context, "_product_uuid", None) @@ -64,7 +91,7 @@ class AttributeType(DjangoObjectType): return base_qs -class AttributeGroupType(DjangoObjectType): +class AttributeGroupType(DjangoObjectType): # type: ignore [misc] attributes = List(lambda: AttributeType, description=_("grouped attributes")) class Meta: @@ -74,7 +101,7 @@ class AttributeGroupType(DjangoObjectType): filter_fields = ["uuid"] description = _("groups of attributes") - def resolve_attributes(self: AttributeGroup, info): + def resolve_attributes(self: AttributeGroup, info) -> QuerySet[Attribute]: product_uuid = getattr(info.context, "_product_uuid", None) qs = self.attributes.all() @@ -85,39 +112,82 @@ class AttributeGroupType(DjangoObjectType): return qs -class BrandType(DjangoObjectType): +class BrandType(DjangoObjectType): # type: ignore [misc] categories = List(lambda: CategoryType, description=_("categories")) + seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot")) class Meta: model = Brand interfaces = (relay.Node,) - fields = ("uuid", "categories", "name", "description", "big_logo", "small_logo") + fields = ("uuid", "categories", "name", "description", "big_logo", "small_logo", "slug") filter_fields = ["uuid", "name"] description = _("brands") - def resolve_categories(self: Brand, info): + def resolve_categories(self: Brand, info) -> QuerySet[Category]: if info.context.user.has_perm("core.view_category"): return self.categories.all() return self.categories.filter(is_active=True) - def resolve_big_logo(self: Brand, info): + def resolve_big_logo(self: Brand, info) -> str | None: return info.context.build_absolute_uri(self.big_logo.url) if self.big_logo else "" - def resolve_small_logo(self: Brand, info): + def resolve_small_logo(self: Brand, info) -> str | None: return info.context.build_absolute_uri(self.small_logo.url) if self.small_logo else "" + def resolve_seo_meta(self: Brand, info) -> dict[str, str | list[Any] | dict[str, str] | None]: + lang = graphene_current_lang() + base = f"https://{settings.BASE_DOMAIN}" + canonical = f"{base}/{lang}/brand/{self.slug}" + title = f"{self.name} | {settings.PROJECT_NAME}" + description = (self.description or "")[:180] -class FilterableAttributeType(ObjectType): + logo_url = None + if getattr(self, "big_logo", None): + logo_url = graphene_abs(info.context, self.big_logo.url) + elif getattr(self, "small_logo", None): + logo_url = graphene_abs(info.context, self.small_logo.url) + + og = { + "title": title, + "description": description, + "type": "website", + "url": canonical, + "image": logo_url or "", + } + tw = {"card": "summary_large_image", "title": title, "description": description, "image": logo_url or ""} + + crumbs = [("Home", f"{base}/"), (self.name, canonical)] + + json_ld = [ + org_schema(), + website_schema(), + breadcrumb_schema(crumbs), + brand_schema(self, canonical, logo_url=logo_url), + ] + + return { + "title": title, + "description": description, + "canonical": canonical, + "robots": "index,follow", + "open_graph": og, + "twitter": tw, + "json_ld": json_ld, + "hreflang": info.context.LANGUAGE_CODE, + } + + +class FilterableAttributeType(ObjectType): # type: ignore [misc] attribute_name = String(required=True) possible_values = List(String, required=True) -class MinMaxPriceType(ObjectType): +class MinMaxPriceType(ObjectType): # type: ignore [misc] min_price = Float() max_price = Float() -class CategoryType(DjangoObjectType): +class CategoryType(DjangoObjectType): # type: ignore [misc] children = List( lambda: CategoryType, description=_("categories"), @@ -134,6 +204,7 @@ class CategoryType(DjangoObjectType): ) tags = DjangoFilterConnectionField(lambda: CategoryTagType, description=_("tags for this category")) products = DjangoFilterConnectionField(lambda: ProductType, description=_("products in this category")) + seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot")) class Meta: model = Category @@ -141,7 +212,6 @@ class CategoryType(DjangoObjectType): fields = ( "uuid", "markup_percent", - "attributes", "children", "name", "slug", @@ -152,11 +222,16 @@ class CategoryType(DjangoObjectType): filter_fields = ["uuid"] description = _("categories") - def resolve_children(self, info) -> TreeQuerySet: + def resolve_children(self, info) -> TreeQuerySet | list[Category]: categories = Category.objects.filter(parent=self) - if info.context.user.has_perm("core.view_category"): - return categories - return categories.filter(is_active=True) + if not info.context.user.has_perm("core.view_category"): + categories = categories.filter(is_active=True) + result: TreeQuerySet | list[Category] = categories + with suppress(Exception): + items = list(categories) + Category.bulk_prefetch_filterable_attributes(items) + result = items + return result def resolve_image(self: Category, info) -> str: return info.context.build_absolute_uri(self.image.url) if self.image else "" @@ -166,39 +241,8 @@ class CategoryType(DjangoObjectType): return float(self.markup_percent) return 0.0 - def resolve_filterable_attributes(self: Category, info): - filterable_results = cache.get(f"{self.uuid}_filterable_results", []) - - if len(filterable_results) > 0: - return filterable_results - - for attr in ( - self.attributes.all() - if info.context.user.has_perm("view_attribute") - else self.attributes.filter(is_active=True) - ): - distinct_vals = ( - AttributeValue.objects.annotate(value_length=Length("value")) - .filter(attribute=attr, product__category=self, value_length__lte=30) - .values_list("value", flat=True) - .distinct() - ) - - distinct_vals_list = list(distinct_vals) - - if len(distinct_vals_list) <= 128: - filterable_results.append( - { - "attribute_name": attr.name, - "possible_values": distinct_vals_list, - } - ) - else: - pass - - cache.set(f"{self.uuid}_filterable_results", filterable_results, 86400) - - return filterable_results + def resolve_filterable_attributes(self: Category, _info): + return self.filterable_attributes def resolve_min_max_prices(self: Category, _info): min_max_prices = cache.get(key=f"{self.name}_min_max_prices", default={}) @@ -216,8 +260,60 @@ class CategoryType(DjangoObjectType): "max_price": min_max_prices["max_price"], } + def resolve_seo_meta(self: Category, info): + lang = graphene_current_lang() + base = f"https://{settings.BASE_DOMAIN}" + canonical = f"{base}/{lang}/catalog/{self.slug}" + title = f"{self.name} | {settings.PROJECT_NAME}" + description = (self.description or "")[:180] -class VendorType(DjangoObjectType): + og_image = graphene_abs(info.context, self.image.url) if getattr(self, "image", None) else "" + + og = { + "title": title, + "description": description, + "type": "website", + "url": canonical, + "image": og_image, + } + tw = {"card": "summary_large_image", "title": title, "description": description, "image": og_image} + + crumbs = [("Home", f"{base}/")] + for c in self.get_ancestors(): + crumbs.append((c.name, f"{base}/{lang}/catalog/{c.slug}")) + crumbs.append((self.name, canonical)) + + json_ld = [org_schema(), website_schema(), breadcrumb_schema(crumbs), category_schema(self, canonical)] + + product_urls = [] + qs = ( + Product.objects.filter( + is_active=True, + category=self, + brand__is_active=True, + stocks__vendor__is_active=True, + ) + .only("slug") + .distinct()[:24] + ) + for p in qs: + product_urls.append(f"{base}/{lang}/product/{p.slug}") + if product_urls: + json_ld.append(item_list_schema(product_urls)) + + return { + "title": title, + "description": description, + "canonical": canonical, + "robots": "index,follow", + "open_graph": og, + "twitter": tw, + "json_ld": json_ld, + "hreflang": info.context.LANGUAGE_CODE, + } + + +class VendorType(DjangoObjectType): # type: ignore [misc] markup_percent = Float(description=_("markup percentage")) class Meta: @@ -228,12 +324,13 @@ class VendorType(DjangoObjectType): description = _("vendors") -class AddressType(DjangoObjectType): +class AddressType(DjangoObjectType): # type: ignore [misc] latitude = Float(description=_("Latitude (Y coordinate)")) longitude = Float(description=_("Longitude (X coordinate)")) class Meta: model = Address + interfaces = (relay.Node,) fields = ( "uuid", "street", @@ -257,7 +354,7 @@ class AddressType(DjangoObjectType): return self.location.y if self.location else None -class FeedbackType(DjangoObjectType): +class FeedbackType(DjangoObjectType): # type: ignore [misc] comment = String(description=_("comment")) rating = Int(description=_("rating value from 1 to 10, inclusive, or 0 if not set.")) @@ -269,10 +366,11 @@ class FeedbackType(DjangoObjectType): description = _("represents feedback from a user.") -class OrderProductType(DjangoObjectType): +class OrderProductType(DjangoObjectType): # type: ignore [misc] attributes = GenericScalar(description=_("attributes")) notifications = GenericScalar(description=_("notifications")) download_url = String(description=_("download url for this order product if applicable")) + feedback = Field(lambda: FeedbackType, description=_("feedback")) class Meta: model = OrderProduct @@ -285,10 +383,15 @@ class OrderProductType(DjangoObjectType): "comments", "attributes", "notifications", + "feedback", ) filter_fields = ["uuid"] description = _("order products") + def resolve_feedback(self: OrderProduct, _info): + feedbacks = Feedback.objects.filter(order_product=self) + return feedbacks.first() if feedbacks.exists() else None + def resolve_attributes(self, _info): return camelize(self.attributes) @@ -299,7 +402,7 @@ class OrderProductType(DjangoObjectType): return self.download_url -class OrderType(DjangoObjectType): +class OrderType(DjangoObjectType): # type: ignore [misc] order_products = DjangoFilterConnectionField( OrderProductType, description=_("a list of order products in this order") ) @@ -313,6 +416,7 @@ class OrderType(DjangoObjectType): is_whole_digital = Float(description=_("are all products in the order digital")) attributes = GenericScalar(description=_("attributes")) notifications = GenericScalar(description=_("notifications")) + payments_transactions = Field(TransactionType, description=_("transactions for this order")) class Meta: model = Order @@ -329,23 +433,29 @@ class OrderType(DjangoObjectType): "total_quantity", "is_whole_digital", "human_readable_id", + "payments_transactions", ) description = _("orders") - def resolve_total_price(self, _info): + def resolve_total_price(self: Order, _info) -> float: return self.total_price - def resolve_total_quantity(self, _info): + def resolve_total_quantity(self: Order, _info) -> int: return self.total_quantity - def resolve_notifications(self, _info): + def resolve_notifications(self: Order, _info) -> dict[str, Any]: return camelize(self.notifications) - def resolve_attributes(self, _info): + def resolve_attributes(self: Order, _info) -> dict[str, Any]: return camelize(self.attributes) + def resolve_payments_transactions(self: Order, _info): + if self.payments_transactions: + return self.payments_transactions.all() + return None -class ProductImageType(DjangoObjectType): + +class ProductImageType(DjangoObjectType): # type: ignore [misc] image = String(description=_("image url")) class Meta: @@ -359,7 +469,7 @@ class ProductImageType(DjangoObjectType): return info.context.build_absolute_uri(self.image.url) if self.image else "" -class ProductType(DjangoObjectType): +class ProductType(DjangoObjectType): # type: ignore [misc] category = Field(CategoryType, description=_("category")) images = DjangoFilterConnectionField(ProductImageType, description=_("images")) feedbacks = DjangoFilterConnectionField(FeedbackType, description=_("feedbacks")) @@ -368,12 +478,17 @@ class ProductType(DjangoObjectType): price = Float(description=_("price")) quantity = Float(description=_("quantity")) feedbacks_count = Int(description=_("number of feedbacks")) + personal_orders_only = Boolean(description=_("only available for personal orders")) + seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot")) + rating = Float(description=_("rating value from 1 to 10, inclusive, or 0 if not set.")) + discount_price = Float(description=_("discount price")) class Meta: model = Product interfaces = (relay.Node,) fields = ( "uuid", + "sku", "category", "brand", "tags", @@ -381,21 +496,29 @@ class ProductType(DjangoObjectType): "slug", "description", "feedbacks", + "feedbacks_count", + "personal_orders_only", + "quantity", + "attribute_groups", "images", "price", + "rating", ) filter_fields = ["uuid", "name"] description = _("products") - def resolve_price(self, _info) -> float: + def resolve_price(self: Product, _info) -> float: return self.price or 0.0 + def resolve_rating(self: Product, _info) -> float: + return self.rating or 0.0 + def resolve_feedbacks(self: Product, _info): if _info.context.user.has_perm("core.view_feedback"): return Feedback.objects.filter(order_product__product=self) return Feedback.objects.filter(order_product__product=self, is_active=True) - def resolve_feedbacks_count(self, _info) -> int: + def resolve_feedbacks_count(self: Product, _info) -> int: return self.feedbacks_count or 0 def resolve_attribute_groups(self: Product, info): @@ -403,11 +526,63 @@ class ProductType(DjangoObjectType): return AttributeGroup.objects.filter(attributes__values__product=self).distinct() - def resolve_quantity(self, _info) -> int: + def resolve_quantity(self: Product, _info) -> int: return self.quantity or 0 + def resolve_personal_orders_only(self: Product, _info) -> bool: + return False or self.personal_orders_only -class AttributeValueType(DjangoObjectType): + def resolve_seo_meta(self: Product, info): + lang = graphene_current_lang() + base = f"https://{settings.BASE_DOMAIN}" + canonical = f"{base}/{lang}/product/{self.slug}" + title = f"{self.name} | {settings.PROJECT_NAME}" + description = (self.description or "")[:180] + + first_img = self.images.order_by("priority").first() + og_image = graphene_abs(info.context, first_img.image.url) if first_img else "" + + og = { + "title": title, + "description": description, + "type": "product", + "url": canonical, + "image": og_image, + } + tw = {"card": "summary_large_image", "title": title, "description": description, "image": og_image} + + crumbs = [("Home", f"{base}/")] + if self.category: + for c in self.category.get_ancestors(include_self=True): + crumbs.append((c.name, f"{base}/{lang}/catalog/{c.slug}")) + crumbs.append((self.name, canonical)) + + images = list(self.images.all()[:6]) + rating = {"value": self.rating, "count": self.feedbacks_count} + + json_ld = [ + org_schema(), + website_schema(), + breadcrumb_schema(crumbs), + product_schema(self, images, rating=rating), + ] + + return { + "title": title, + "description": description, + "canonical": canonical, + "robots": "index,follow", + "open_graph": og, + "twitter": tw, + "json_ld": json_ld, + "hreflang": info.context.LANGUAGE_CODE, + } + + def resolve_discount_price(self: Product, _info) -> float | None: + return self.discount_price + + +class AttributeValueType(DjangoObjectType): # type: ignore [misc] value = String(description=_("attribute value")) class Meta: @@ -418,7 +593,7 @@ class AttributeValueType(DjangoObjectType): description = _("attribute value") -class PromoCodeType(DjangoObjectType): +class PromoCodeType(DjangoObjectType): # type: ignore [misc] discount = Float() discount_type = String() @@ -436,13 +611,13 @@ class PromoCodeType(DjangoObjectType): description = _("promocodes") def resolve_discount(self: PromoCode, _info) -> float: - return float(self.discount_percent) if self.discount_percent else float(self.discount_amount) + return float(self.discount_percent) if self.discount_percent else float(self.discount_amount) # type: ignore [arg-type] def resolve_discount_type(self: PromoCode, _info) -> str: return "percent" if self.discount_percent else "amount" -class PromotionType(DjangoObjectType): +class PromotionType(DjangoObjectType): # type: ignore [misc] products = DjangoFilterConnectionField(ProductType, description=_("products on sale")) class Meta: @@ -453,7 +628,7 @@ class PromotionType(DjangoObjectType): description = _("promotions") -class StockType(DjangoObjectType): +class StockType(DjangoObjectType): # type: ignore [misc] vendor = Field(VendorType, description=_("vendor")) product = Field(ProductType, description=_("product")) @@ -465,7 +640,7 @@ class StockType(DjangoObjectType): description = _("stocks") -class WishlistType(DjangoObjectType): +class WishlistType(DjangoObjectType): # type: ignore [misc] products = DjangoFilterConnectionField(ProductType, description=_("wishlisted products")) class Meta: @@ -475,7 +650,7 @@ class WishlistType(DjangoObjectType): description = _("wishlists") -class ProductTagType(DjangoObjectType): +class ProductTagType(DjangoObjectType): # type: ignore [misc] product_set = DjangoFilterConnectionField(ProductType, description=_("tagged products")) class Meta: @@ -486,7 +661,7 @@ class ProductTagType(DjangoObjectType): description = _("product tags") -class CategoryTagType(DjangoObjectType): +class CategoryTagType(DjangoObjectType): # type: ignore [misc] category_set = DjangoFilterConnectionField(CategoryType, description=_("tagged categories")) class Meta: @@ -497,9 +672,8 @@ class CategoryTagType(DjangoObjectType): description = _("categories tags") -class ConfigType(ObjectType): +class ConfigType(ObjectType): # type: ignore [misc] project_name = String(description=_("project name")) - base_domain = String(description=_("company email")) company_name = String(description=_("company name")) company_address = String(description=_("company address")) company_phone_number = String(description=_("company phone number")) @@ -514,7 +688,7 @@ class ConfigType(ObjectType): description = _("company configuration") -class LanguageType(ObjectType): +class LanguageType(ObjectType): # type: ignore [misc] code = String(description=_("language code")) name = String(description=_("language name")) flag = String(description=_("language flag, if exists :)")) @@ -523,40 +697,40 @@ class LanguageType(ObjectType): description = _("supported languages") -class SearchProductsResultsType(ObjectType): +class SearchProductsResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() image = String() -class SearchCategoriesResultsType(ObjectType): +class SearchCategoriesResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() image = String() -class SearchBrandsResultsType(ObjectType): +class SearchBrandsResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() image = String() -class SearchPostsResultsType(ObjectType): +class SearchPostsResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() -class SearchResultsType(ObjectType): +class SearchResultsType(ObjectType): # type: ignore [misc] products = List(description=_("products search results"), of_type=SearchProductsResultsType) categories = List(description=_("products search results"), of_type=SearchCategoriesResultsType) brands = List(description=_("products search results"), of_type=SearchBrandsResultsType) posts = List(description=_("posts search results"), of_type=SearchPostsResultsType) -class BulkActionOrderProductInput(InputObjectType): +class BulkProductInput(InputObjectType): # type: ignore [misc] uuid = UUID(required=True) attributes = GenericScalar(required=False) diff --git a/core/graphene/schema.py b/engine/core/graphene/schema.py similarity index 79% rename from core/graphene/schema.py rename to engine/core/graphene/schema.py index c38a8b80..870024eb 100644 --- a/core/graphene/schema.py +++ b/engine/core/graphene/schema.py @@ -1,13 +1,17 @@ import logging +from django.conf import settings from django.core.cache import cache from django.core.exceptions import PermissionDenied +from django.db.models import Case, Exists, IntegerField, OuterRef, Q, Value, When +from django.utils import timezone from graphene import Field, List, ObjectType, Schema from graphene_django.filter import DjangoFilterConnectionField -from blog.filters import PostFilter -from blog.graphene.object_types import PostType -from core.filters import ( +from engine.blog.filters import PostFilter +from engine.blog.graphene.object_types import PostType +from engine.core.filters import ( + AddressFilter, BrandFilter, CategoryFilter, FeedbackFilter, @@ -15,20 +19,20 @@ from core.filters import ( ProductFilter, WishlistFilter, ) -from core.graphene.mutations import ( +from engine.core.graphene.mutations import ( AddOrderProduct, AddWishlistProduct, AutocompleteAddress, BulkOrderAction, + BulkWishlistAction, BuyOrder, BuyProduct, BuyWishlist, CacheOperator, ContactUs, CreateAddress, - CreateProduct, DeleteAddress, - DeleteProduct, + FeedbackProductAction, RemoveAllOrderProducts, RemoveAllWishlistProducts, RemoveOrderProduct, @@ -36,9 +40,9 @@ from core.graphene.mutations import ( RemoveWishlistProduct, RequestCursedURL, Search, - UpdateProduct, ) -from core.graphene.object_types import ( +from engine.core.graphene.object_types import ( + AddressType, AttributeGroupType, BrandType, CategoryTagType, @@ -57,7 +61,8 @@ from core.graphene.object_types import ( VendorType, WishlistType, ) -from core.models import ( +from engine.core.models import ( + Address, AttributeGroup, Brand, Category, @@ -74,13 +79,14 @@ from core.models import ( Vendor, Wishlist, ) -from core.utils import get_project_parameters -from core.utils.languages import get_flag_by_language -from core.utils.messages import permission_denied_message -from evibes.settings import LANGUAGES -from payments.graphene.mutations import Deposit -from vibes_auth.filters import UserFilter -from vibes_auth.graphene.mutations import ( +from engine.core.utils import get_project_parameters +from engine.core.utils.languages import get_flag_by_language +from engine.core.utils.messages import permission_denied_message +from engine.payments.graphene.mutations import Deposit +from engine.payments.graphene.object_types import LimitsType +from engine.payments.utils.gateways import get_limits +from engine.vibes_auth.filters import UserFilter +from engine.vibes_auth.graphene.mutations import ( ActivateUser, ConfirmResetPassword, CreateUser, @@ -92,18 +98,20 @@ from vibes_auth.graphene.mutations import ( UploadAvatar, VerifyJSONWebToken, ) -from vibes_auth.graphene.object_types import UserType -from vibes_auth.models import User +from engine.vibes_auth.graphene.object_types import UserType +from engine.vibes_auth.models import User -logger = logging.getLogger("evibes") +logger = logging.getLogger(__name__) class Query(ObjectType): parameters = Field(ConfigType) languages = List(LanguageType) + payments_limits = Field(LimitsType) products = DjangoFilterConnectionField(ProductType, filterset_class=ProductFilter) orders = DjangoFilterConnectionField(OrderType, filterset_class=OrderFilter) users = DjangoFilterConnectionField(UserType, filterset_class=UserFilter) + addresses = DjangoFilterConnectionField(AddressType, filterset_class=AddressFilter) attribute_groups = DjangoFilterConnectionField(AttributeGroupType) categories = DjangoFilterConnectionField(CategoryType, filterset_class=CategoryFilter) vendors = DjangoFilterConnectionField(VendorType) @@ -129,28 +137,55 @@ class Query(ObjectType): if not languages: languages = [ - {"code": lang[0], "name": lang[1], "flag": get_flag_by_language(lang[0])} for lang in LANGUAGES + {"code": lang[0], "name": lang[1], "flag": get_flag_by_language(lang[0])} for lang in settings.LANGUAGES ] cache.set("languages", languages, 60 * 60) return languages + @staticmethod + def resolve_payments_limits(_parent, _info): + min_amount, max_amount = get_limits() + return {"min_amount": min_amount, "max_amount": max_amount} + @staticmethod def resolve_products(_parent, info, **kwargs): if info.context.user.is_authenticated and kwargs.get("uuid"): product = Product.objects.get(uuid=kwargs["uuid"]) if product.is_active and product.brand.is_active and product.category.is_active: info.context.user.add_to_recently_viewed(product.uuid) - return ( + base_qs = ( Product.objects.all().select_related("brand", "category").prefetch_related("images", "stocks") if info.context.user.has_perm("core.view_product") else Product.objects.filter( - is_active=True, brand__is_active=True, category__is_active=True, stocks__isnull=False + is_active=True, + brand__is_active=True, + category__is_active=True, + stocks__isnull=False, + stocks__vendor__is_active=True, ) .select_related("brand", "category") .prefetch_related("images", "stocks") ) + stock_with_price = Stock.objects.filter(product_id=OuterRef("pk"), price__gt=0) + stock_with_qty = Stock.objects.filter(product_id=OuterRef("pk"), quantity__gt=0) + + return ( + base_qs.annotate( + has_price=Exists(stock_with_price), + has_stock=Exists(stock_with_qty), + ) + .annotate( + personal_order_tail=Case( + When(Q(has_price=False) | Q(has_stock=False), then=Value(1)), + default=Value(0), + output_field=IntegerField(), + ) + ) + .order_by("personal_order_tail") + ) + @staticmethod def resolve_orders(_parent, info, **kwargs): orders = Order.objects @@ -284,7 +319,12 @@ class Query(ObjectType): promocodes = PromoCode.objects if info.context.user.has_perm("core.view_promocode"): return promocodes.filter(user__uuid=kwargs.get("user_uuid")) or promocodes.all() - return promocodes.filter(is_active=True, user=info.context.user) + return promocodes.filter( + is_active=True, + user=info.context.user, + used_on__isnull=True, + start_time__lte=timezone.now(), + ) @staticmethod def resolve_product_tags(_parent, info, **_kwargs): @@ -298,6 +338,12 @@ class Query(ObjectType): return CategoryTag.objects.all() return CategoryTag.objects.filter(is_active=True) + @staticmethod + def resolve_addresses(_parent, info, **_kwargs): + if info.context.user.has_perm("core.view_address"): + return Address.objects.all() + return Address.objects.filter(is_active=True, user=info.context.user) + class Mutation(ObjectType): search = Search.Field() @@ -314,6 +360,8 @@ class Mutation(ObjectType): remove_order_products_of_a_kind = RemoveOrderProductsOfAKind.Field() buy_order = BuyOrder.Field() bulk_order_action = BulkOrderAction.Field() + bulk_wishlist_action = BulkWishlistAction.Field() + feedback_product_action = FeedbackProductAction.Field() deposit = Deposit.Field() obtain_jwt_token = ObtainJSONWebToken.Field() refresh_jwt_token = RefreshJSONWebToken.Field() @@ -326,9 +374,6 @@ class Mutation(ObjectType): reset_password = ResetPassword.Field() confirm_reset_password = ConfirmResetPassword.Field() buy_product = BuyProduct.Field() - create_product = CreateProduct.Field() - update_product = UpdateProduct.Field() - delete_product = DeleteProduct.Field() create_address = CreateAddress.Field() delete_address = DeleteAddress.Field() autocomplete_address = AutocompleteAddress.Field() diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.mo b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..10d26553 Binary files /dev/null and b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.po b/engine/core/locale/ar_AR/LC_MESSAGES/django.po new file mode 100644 index 00000000..a0b24550 --- /dev/null +++ b/engine/core/locale/ar_AR/LC_MESSAGES/django.po @@ -0,0 +1,3374 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: ar-ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "المعرف الفريد" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "يستخدم المعرف الفريد لتحديد أي كائن قاعدة بيانات بالتأكيد" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "نشط" + +#: engine/core/abstract.py:21 +msgid "" +"if set to false, this object can't be seen by users without needed " +"permission" +msgstr "" +"إذا تم تعيينه على خطأ، لا يمكن للمستخدمين رؤية هذا الكائن دون الحاجة إلى إذن" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "تم إنشاؤها" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "عندما ظهر الكائن لأول مرة في قاعدة البيانات" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "تم التعديل" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "متى تم تحرير الكائن آخر مرة" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "الترجمات" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "جنرال لواء" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "العلاقات" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "معلومات إضافية" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "البيانات الوصفية" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "الطوابع الزمنية" + +#: 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:138 +msgid "selected items have been activated." +msgstr "تم تفعيل العناصر المختارة!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "تم إلغاء تنشيط العناصر المحددة!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "قيم السمات" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "الصورة" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "الصور" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "المخزون" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "الأسهم" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "طلب المنتج" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "الأطفال" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "التكوين" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "الأساسيات" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "تم الانتهاء" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "التوصيل" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "تم التسليم" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "تم الإلغاء" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "فشل" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "قيد الانتظار" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "مقبولة" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "الأموال التي تم إرجاعها" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "الدفع" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "مومنتال" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "ناجح" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "مخطط OpenAPI بتنسيق محدد مع لغة محددة" + +#: engine/core/docs/drf/views.py:33 +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 "" +"مخطط OpenApi3 لواجهة برمجة التطبيقات هذه. يمكن تحديد التنسيق عبر التفاوض على" +" المحتوى. يمكن تحديد اللغة باستخدام معلمة قبول اللغة ومعلمة الاستعلام على حد" +" سواء." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "ذاكرة التخزين المؤقت للإدخال/الإخراج" + +#: engine/core/docs/drf/views.py:46 +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 "" +"تطبيق مفتاح فقط لقراءة البيانات المسموح بها من ذاكرة التخزين المؤقت.\n" +"تطبيق مفتاح وبيانات ومهلة مع المصادقة لكتابة البيانات إلى ذاكرة التخزين المؤقت." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "الحصول على قائمة باللغات المدعومة" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "الحصول على معلمات التطبيق القابلة للكشف" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "إرسال رسالة إلى فريق الدعم" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "طلب عنوان URL مرتبط بـ CORSed. مسموح بـ https فقط." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "البحث بين المنتجات والفئات والعلامات التجارية" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "نقطة نهاية بحث عالمية للاستعلام عبر جداول المشروع" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "شراء طلب شراء كشركة" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"اشترِ طلبًا كعمل تجاري، باستخدام \"المنتجات\" المتوفرة مع \"معرّف_المنتج\" " +"و\"السمات\"." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "تنزيل أصل رقمي من طلب رقمي تم شراؤه" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "سرد كل مجموعات السمات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "استرداد مجموعة سمة واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "إنشاء مجموعة سمات" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "حذف مجموعة سمات" + +#: engine/core/docs/drf/viewsets.py:89 +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 "إعادة كتابة بعض حقول مجموعة سمات موجودة تحفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "سرد جميع السمات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "استرداد سمة واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "إنشاء سمة" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "حذف سمة" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "سرد جميع قيم السمات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "استرداد قيمة سمة واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "إنشاء قيمة السمة" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "حذف قيمة سمة" + +#: engine/core/docs/drf/viewsets.py:179 +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 "إعادة كتابة بعض حقول قيمة سمة موجودة حفظ غير قابل للتعديل" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "قائمة بجميع الفئات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "استرداد فئة واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "معرّف الفئة UUID أو سبيكة" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "إنشاء فئة" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "حذف فئة" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "لقطة تعريفية لتحسين محركات البحث SEO" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث الخاصة بالفئة" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "قائمة بجميع الفئات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"البحث في سلسلة فرعية غير حساسة لحالة الأحرف عبر 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" +msgstr "تصفية الطلبات ذات وقت_الشراء >= تاريخ ووقت الشراء هذا ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "تصفية الطلبات ذات وقت_الشراء <= تاريخ ووقت الشراء ISO 8601 هذا" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "تصفية حسب الطلب الدقيق UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "التصفية حسب مُعرِّف الطلب المقروء بشريًا بالضبط" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"تصفية حسب البريد الإلكتروني للمستخدم (مطابقة تامة غير حساسة لحالة الأحرف)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "تصفية حسب معرّف المستخدم UUID" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" +"الترتيب حسب واحد من: uuid، معرف_بشري_مقروء، بريد_إلكتروني_مستخدم، مستخدم، " +"حالة، إنشاء، تعديل، وقت_الشراء، عشوائي. البادئة بحرف \"-\" للترتيب التنازلي " +"(على سبيل المثال \"-وقت_الشراء\")." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "استرداد فئة واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "طلب معرّف UUID أو معرّف قابل للقراءة البشرية" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "إنشاء سمة" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "لا يعمل مع المستخدمين من غير الموظفين." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "حذف سمة" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "سعر الشراء وقت الطلب" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"ينهي أمر الشراء. إذا تم استخدام \"فرض_الرصيد\"، يتم إكمال عملية الشراء " +"باستخدام رصيد المستخدم؛ إذا تم استخدام \"فرض_الدفع\"، يتم بدء المعاملة." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "استرداد الطلب المعلق الحالي للمستخدم" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "استرداد الطلب الحالي المعلق لمستخدم مصادق عليه" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "شراء طلب شراء بدون إنشاء حساب" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "إنهاء طلب الشراء لمستخدم غير مسجل." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "إضافة منتج إلى الطلب" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "يضيف منتجًا إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "إضافة قائمة بالمنتجات المطلوب طلبها، لن يتم احتساب الكميات" + +#: engine/core/docs/drf/viewsets.py:430 +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" +msgstr "إزالة منتج من الطلب" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "يزيل منتجًا من أحد الطلبات باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "إزالة منتج من الطلب، لن يتم احتساب الكميات" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"يزيل قائمة من المنتجات من الطلب باستخدام \"معرّف_المنتج\" و\"السمات\" " +"المتوفرة." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "سرد جميع السمات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"بالنسبة للمستخدمين من غير الموظفين، يتم إرجاع قوائم الرغبات الخاصة بهم فقط." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "استرداد سمة واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "إنشاء سمة" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "لا يعمل مع المستخدمين من غير الموظفين." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "حذف سمة" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "استرداد قائمة الرغبات المعلقة الحالية للمستخدم" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "استرداد قائمة أمنيات حالية معلقة لمستخدم مصادق عليه" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "إضافة منتج إلى الطلب" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "يضيف منتجًا إلى قائمة أمنيات باستخدام 'product_uid' المتوفرة" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "إزالة منتج من قائمة الرغبات" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "يزيل منتجًا من قائمة أمنيات باستخدام 'product_uid' المتوفرة" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "إضافة العديد من المنتجات إلى قائمة الرغبات" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"يضيف العديد من المنتجات إلى قائمة الرغبات باستخدام 'product_uids' المتوفرة" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "إزالة منتج من الطلب" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"يزيل العديد من المنتجات من قائمة الرغبات باستخدام 'product_uids' المتوفرة" + +#: 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" +"• **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" +"`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" +"أمثلة: \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 +msgid "list all products (simple view)" +msgstr "قائمة بجميع المنتجات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "(بالضبط) UUID المنتج" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"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، تصنيف، اسم، سبيكة، إنشاء، تعديل، سعر، عشوائي" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "استرداد منتج واحد (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "إنشاء منتج" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "تحديث بعض حقول منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "حذف منتج" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "سرد جميع الملاحظات المسموح بها للمنتج" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث للمنتج" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "قائمة بجميع العناوين" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "استرجاع عنوان واحد" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "إنشاء عنوان جديد" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "حذف عنوان" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "تحديث عنوان كامل" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "تحديث جزئي للعنوان" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +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 تطبيق docker exec الشعر تشغيل إدارة python.py " +"deepl_translate -l en-gb -l ar-ar -l cs-cz -l da-dk -l de-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 nl-nl -l pl-" +"pl -l pt-br -l ro-ro -l ru-ru -l zh-hans -l zh-ans -a core -a geo -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" +msgstr "تحديد كمية النتائج، 1 < الحد < 10، الافتراضي: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "سرد جميع الملاحظات (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "استرداد تعليق واحد (عرض مفصل)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "إنشاء ملاحظات" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "حذف تعليق" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "إعادة كتابة ملاحظات حالية تحفظ المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "إعادة كتابة بعض حقول الملاحظات الحالية التي تحفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "سرد جميع العلاقات بين الطلب والمنتج (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "استرداد علاقة طلب منتج واحد (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "إنشاء علاقة جديدة بين الطلب والمنتج" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "استبدال علاقة الطلب-المنتج الحالية" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "تحديث جزئي لعلاقة الطلب والمنتج الحالية" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "حذف علاقة الطلب-المنتج" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "قائمة بجميع العلامات التجارية (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "استرداد علامة تجارية واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID أو سبيكة العلامة التجارية" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "إنشاء علامة تجارية" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "حذف علامة تجارية" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "إعادة كتابة علامة تجارية حالية توفر المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "إعادة كتابة بعض الحقول لعلامة تجارية موجودة حفظ غير قابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "قائمة بجميع البائعين (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "استرداد بائع واحد (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "إنشاء بائع" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "حذف بائع" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "إعادة كتابة بائع موجود حفظ المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "إعادة كتابة بعض حقول البائع الحالي لحفظ المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "سرد جميع صور المنتج (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "استرداد صورة منتج واحد (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "إنشاء صورة المنتج" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "حذف صورة المنتج" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "إعادة كتابة صورة منتج موجود حفظ غير قابل للتعديل" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "إعادة كتابة بعض حقول صورة منتج موجود حفظ غير قابل للتعديل" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "قائمة بجميع الرموز الترويجية (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "استرداد رمز ترويجي واحد (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "إنشاء رمز ترويجي" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "حذف الرمز الترويجي" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "إعادة كتابة الرمز الترويجي الحالي الذي يوفر غير القابل للتعديل" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "إعادة كتابة بعض حقول الرمز الترويجي الحالي مع حفظ غير القابل للتعديل" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "قائمة بجميع العروض الترويجية (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "استرداد ترقية واحدة (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "إنشاء عرض ترويجي" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "حذف ترقية" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "إعادة كتابة عرض ترويجي حالي يوفر المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"إعادة كتابة بعض الحقول في ترقية حالية مع حفظ غير المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "قائمة بجميع الأسهم (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "استرداد مخزون واحد (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "إنشاء سجل مخزون" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "حذف سجل مخزون" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "إعادة كتابة سجل مخزون موجود يحفظ المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "إعادة كتابة بعض حقول السجل الحالي للمخزون مع حفظ غير القابل للتعديل" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "سرد جميع علامات المنتج (عرض بسيط)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "استرداد علامة منتج واحد (عرض تفصيلي)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "إنشاء علامة منتج" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "حذف علامة منتج" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "إعادة كتابة علامة منتج موجود حفظ غير قابل للتعديل" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "إعادة كتابة بعض حقول علامة منتج موجود حفظ غير قابل للتعديل" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "لم يتم توفير مصطلح بحث." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "بحث" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "الاسم" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "الفئات" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "الفئات الرخويات" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "الوسوم" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "الحد الأدنى للسعر" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "ماكس برايس" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "نشط" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "العلامة التجارية" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "السمات" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "الكمية" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "سبيكة" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "هو رقمي" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "تضمين الفئات الفرعية" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "تضمين المنتجات المطلوبة شخصيًا" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "وحدة التخزين" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "تم الشراء بعد (شامل)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "تم الشراء من قبل (شامل)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "البريد الإلكتروني للمستخدم" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "معرّف المستخدم UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "الحالة" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "معرّف قابل للقراءة من قبل الإنسان" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "الوالدين" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "المستوى" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID المنتج" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "" +"مفتاح للبحث عنه في ذاكرة التخزين المؤقت أو تعيينه في ذاكرة التخزين المؤقت" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "البيانات المراد تخزينها في ذاكرة التخزين المؤقت" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "المهلة بالثواني لتعيين البيانات في ذاكرة التخزين المؤقت" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "البيانات المخزنة مؤقتاً" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "إضافة منتج إلى الطلب" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "إزالة منتج من الطلب" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "إزالة جميع المنتجات من الطلب" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "شراء طلبية" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "تنفيذ إجراء على قائمة من المنتجات بالترتيب" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "إزالة/إضافة" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "تنفيذ إجراء على قائمة المنتجات في قائمة الأمنيات" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "يُرجى تقديم قيمة \"wishlist_uid\"." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "إضافة منتج إلى الطلب" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "إزالة منتج من الطلب" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "إزالة منتج من الطلب" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "إزالة منتج من الطلب" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "شراء طلبية" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"please send the attributes as the string formatted like " +"attr1=value1,attr2=value2" +msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr1=قيمة1، attr2=قيمة2" + +#: engine/core/graphene/mutations.py:549 +msgid "add or delete a feedback for orderproduct" +msgstr "إضافة أو حذف تعليق على طلبالمنتج" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} غير موجود: {uuid}!" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "يجب أن يكون الحد بين 1 و10" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - يعمل مثل السحر" + +#: 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:95 +msgid "grouped attributes" +msgstr "السمات المجمعة" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "مجموعات السمات" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "العلامات التجارية" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "الفئات" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "ما هي السمات والقيم التي يمكن استخدامها لتصفية هذه الفئة." + +#: 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:205 +msgid "tags for this category" +msgstr "العلامات الخاصة بهذه الفئة" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "المنتجات في هذه الفئة" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "البائعون" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "خط العرض (الإحداثي Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "خط الطول (الإحداثي X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "كيفية" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "يمثل ملاحظات من المستخدم." + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "الملاحظات" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "قائمة بطلب المنتجات بهذا الترتيب" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "عنوان إرسال الفواتير" + +#: 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:414 +msgid "total price of this order" +msgstr "السعر الإجمالي لهذا الطلب" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "إجمالي كمية المنتجات بالترتيب" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "هل جميع المنتجات في الطلب رقمي" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "المعاملات الخاصة بهذا الطلب" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "الطلبات" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "رابط الصورة" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "صور المنتج" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "الملاحظات" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "مجموعات السمات" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "السعر" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "الكمية" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "عدد الملاحظات" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "المنتجات متاحة للطلبات الشخصية فقط" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "سعر الخصم" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "المنتجات" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "الرموز الترويجية" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "المنتجات المعروضة للبيع" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "العروض الترويجية" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "البائع" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "المنتج" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "المنتجات المفضلة" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "قوائم التمنيات" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "المنتجات الموسومة" + +#: 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:665 +msgid "tagged categories" +msgstr "الفئات الموسومة" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "علامات الفئات" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "اسم المشروع" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "اسم الشركة" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "عنوان الشركة" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "رقم هاتف الشركة" + +#: 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:681 +msgid "email host user" +msgstr "مستخدم البريد الإلكتروني المضيف" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "الحد الأقصى لمبلغ السداد" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "الحد الأدنى لمبلغ السداد" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "بيانات التحليلات" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "بيانات الإعلانات" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "التكوين" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "رمز اللغة" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "اسم اللغة" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "علم اللغة، إذا كان موجوداً :)" + +#: 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 +msgid "products search results" +msgstr "نتائج البحث عن المنتجات" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "نتائج البحث عن المنتجات" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"يمثل مجموعة من السمات، والتي يمكن أن تكون هرمية. تُستخدم هذه الفئة لإدارة " +"مجموعات السمات وتنظيمها. يمكن أن تحتوي مجموعة السمات على مجموعة أصل، مما " +"يشكل بنية هرمية. يمكن أن يكون هذا مفيدًا لتصنيف السمات وإدارتها بشكل أكثر " +"فعالية في النظام المعقد." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "والد هذه المجموعة" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "مجموعة السمات الرئيسية" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "اسم مجموعة السمات" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "مجموعة السمات" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"يمثل كيان بائع قادر على تخزين معلومات حول البائعين الخارجيين ومتطلبات " +"تفاعلهم. يتم استخدام فئة البائع لتعريف وإدارة المعلومات المتعلقة ببائع " +"خارجي. وهو يخزن اسم البائع، وتفاصيل المصادقة المطلوبة للاتصال، والنسبة " +"المئوية للترميز المطبقة على المنتجات المسترجعة من البائع. يحتفظ هذا النموذج " +"أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة " +"التي تتفاعل مع البائعين الخارجيين." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات " +"الخاصة بالمورّد" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "معلومات المصادقة" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "نسبة هامش الربح للبائع" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "اسم هذا البائع" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "اسم البائع" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "ملف الاستجابة" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "استجابة البائع الأخيرة للمعالجة" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "مسار ملف تكامل البائع" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "مسار التكامل" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"يمثل علامة منتج تُستخدم لتصنيف المنتجات أو تعريفها. صُممت فئة ProductTag " +"لتعريف المنتجات وتصنيفها بشكل فريد من خلال مزيج من معرّف علامة داخلي واسم " +"عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر " +"تخصيص البيانات الوصفية لأغراض إدارية." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "معرّف العلامة الداخلي لعلامة المنتج" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "اسم العلامة" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "اسم سهل الاستخدام لعلامة المنتج" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "اسم عرض العلامة" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "علامة المنتج" + +#: engine/core/models.py:229 +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 "" +"يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط" +" المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "علامة الفئة" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "علامات الفئة" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"يمثل كيان فئة لتنظيم وتجميع العناصر ذات الصلة في بنية هرمية. قد يكون للفئات " +"علاقات هرمية مع فئات أخرى، مما يدعم العلاقات بين الأصل والطفل. تتضمن الفئة " +"حقول للبيانات الوصفية والتمثيل المرئي، والتي تعمل كأساس للميزات المتعلقة " +"بالفئات. تُستخدم هذه الفئة عادةً لتعريف وإدارة فئات المنتجات أو غيرها من " +"التجميعات المماثلة داخل التطبيق، مما يسمح للمستخدمين أو المسؤولين بتحديد اسم" +" الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو " +"العلامات أو الأولوية." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "تحميل صورة تمثل هذه الفئة" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "صورة الفئة" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "أصل هذه الفئة لتكوين بنية هرمية" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "الفئة الرئيسية" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "اسم الفئة" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "تقديم اسم لهذه الفئة" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "إضافة وصف تفصيلي لهذه الفئة" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "وصف الفئة" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "الأولوية" + +#: engine/core/models.py:438 +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." +msgstr "" +"يمثل كائن العلامة التجارية في النظام. تتعامل هذه الفئة مع المعلومات والسمات " +"المتعلقة بالعلامة التجارية، بما في ذلك اسمها وشعاراتها ووصفها والفئات " +"المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات " +"المتعلقة بالعلامة التجارية داخل التطبيق." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "اسم هذه العلامة التجارية" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "اسم العلامة التجارية" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "تحميل شعار يمثل هذه العلامة التجارية" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "صورة العلامة التجارية الصغيرة" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "صورة كبيرة للعلامة التجارية" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "إضافة وصف تفصيلي للعلامة التجارية" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "وصف العلامة التجارية" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"يمثل مخزون منتج تتم إدارته في النظام. توفر هذه الفئة تفاصيل حول العلاقة بين " +"البائعين والمنتجات ومعلومات المخزون الخاصة بهم، بالإضافة إلى الخصائص " +"المتعلقة بالمخزون مثل السعر وسعر الشراء والكمية ووحدة المخزون المخزنية " +"والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات " +"المتاحة من مختلف البائعين." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "البائع الذي يورد هذا المنتج المخزون" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "البائع المرتبط" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "السعر النهائي للعميل بعد هوامش الربح" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "سعر البيع" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "المنتج المرتبط بإدخال المخزون هذا" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "المنتج المرتبط" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "السعر المدفوع للبائع مقابل هذا المنتج" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "سعر الشراء من البائع" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "الكمية المتوفرة من المنتج في المخزون" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "الكمية في المخزون" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU المعين من قبل البائع لتحديد المنتج" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "وحدة تخزين البائع" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "ملف رقمي" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "سمات النظام" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "إدخالات المخزون" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"يمثل منتجًا بخصائص مثل الفئة والعلامة التجارية والعلامات والحالة الرقمية " +"والاسم والوصف ورقم الجزء والعلامة التجارية والحالة الرقمية والاسم والوصف " +"ورقم الجزء والسبيكة. يوفر خصائص الأداة المساعدة ذات الصلة لاسترداد التقييمات" +" وعدد الملاحظات والسعر والكمية وإجمالي الطلبات. مصمم للاستخدام في نظام " +"يتعامل مع التجارة الإلكترونية أو إدارة المخزون. تتفاعل هذه الفئة مع النماذج " +"ذات الصلة (مثل الفئة والعلامة التجارية وعلامة المنتج) وتدير التخزين المؤقت " +"للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " +"ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "الفئة التي ينتمي إليها هذا المنتج" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "هل المنتج رقمي" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "توفير اسم تعريفي واضح للمنتج" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "اسم المنتج" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "إضافة وصف تفصيلي للمنتج" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "وصف المنتج" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "رقم الجزء لهذا المنتج" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "رقم الجزء" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "وحدة حفظ المخزون لهذا المنتج" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"يمثل سمة في النظام. تُستخدم هذه الفئة لتعريف السمات وإدارتها، وهي عبارة عن " +"أجزاء قابلة للتخصيص من البيانات التي يمكن ربطها بكيانات أخرى. تحتوي السمات " +"على فئات ومجموعات وأنواع قيم وأسماء مرتبطة بها. يدعم النموذج أنواعًا متعددة " +"من القيم، بما في ذلك السلسلة، والعدد الصحيح، والعائم، والمنطقي، والصفيف، " +"والكائن. وهذا يسمح بهيكلة ديناميكية ومرنة للبيانات." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "مجموعة هذه السمة" + +#: engine/core/models.py:739 +msgid "string" +msgstr "الخيط" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "عدد صحيح" + +#: engine/core/models.py:741 +msgid "float" +msgstr "تعويم" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "منطقية" + +#: engine/core/models.py:743 +msgid "array" +msgstr "المصفوفة" + +#: engine/core/models.py:744 +msgid "object" +msgstr "الكائن" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "نوع قيمة السمة" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "نوع القيمة" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "اسم هذه السمة" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "اسم السمة" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "قابل للتصفية" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" +"يمثل قيمة محددة لسمة مرتبطة بمنتج ما. يربط \"السمة\" بـ \"قيمة\" فريدة، مما " +"يسمح بتنظيم أفضل وتمثيل ديناميكي لخصائص المنتج." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "سمة هذه القيمة" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "توفير نص بديل للصورة لإمكانية الوصول" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "النص البديل للصورة" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "تحميل ملف الصورة لهذا المنتج" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "صورة المنتج" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "يحدد الترتيب الذي يتم عرض الصور به" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "أولوية العرض" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "المنتج الذي تمثله هذه الصورة" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "صور المنتج" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"يمثل حملة ترويجية للمنتجات ذات الخصم. تُستخدم هذه الفئة لتعريف وإدارة " +"الحملات الترويجية التي تقدم خصمًا على أساس النسبة المئوية للمنتجات. تتضمن " +"الفئة سمات لتعيين معدل الخصم وتوفير تفاصيل حول العرض الترويجي وربطه " +"بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" +" في الحملة." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "النسبة المئوية للخصم على المنتجات المختارة" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "نسبة الخصم" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "تقديم اسم فريد لهذا العرض الترويجي" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "اسم الترقية" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "وصف الترقية" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "المنتجات المشمولة" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "الترقية" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"يمثل قائمة أمنيات المستخدم لتخزين وإدارة المنتجات المطلوبة. توفر الفئة وظائف" +" لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " +"بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "مالك قائمة الرغبات" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "قائمة الرغبات" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"يمثل سجل وثائقي مرتبط بمنتج ما. تُستخدم هذه الفئة لتخزين معلومات حول الأفلام" +" الوثائقية المرتبطة بمنتجات محددة، بما في ذلك تحميلات الملفات وبياناتها " +"الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " +"الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "فيلم وثائقي" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "الأفلام الوثائقية" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"يمثل كيان عنوان يتضمن تفاصيل الموقع والارتباطات مع المستخدم. يوفر وظائف " +"لتخزين البيانات الجغرافية وبيانات العنوان، بالإضافة إلى التكامل مع خدمات " +"الترميز الجغرافي. صُممت هذه الفئة لتخزين معلومات العنوان التفصيلية بما في " +"ذلك مكونات مثل الشارع والمدينة والمنطقة والبلد والموقع الجغرافي (خطوط الطول " +"والعرض). وهو يدعم التكامل مع واجهات برمجة التطبيقات للترميز الجغرافي، مما " +"يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " +"تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "سطر العنوان للعميل" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "سطر العنوان" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "الشارع" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "المنطقة" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "المدينة" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "المنطقة" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "الرمز البريدي" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "البلد" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "العنوان" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "العناوين" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"يمثل الرمز الترويجي الذي يمكن استخدامه للحصول على خصومات وإدارة صلاحيته ونوع" +" الخصم والتطبيق. تقوم فئة PromoCode بتخزين تفاصيل حول الرمز الترويجي، بما في" +" ذلك معرفه الفريد، وخصائص الخصم (المبلغ أو النسبة المئوية)، وفترة الصلاحية، " +"والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " +"الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "معرّف الرمز الترويجي" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "مبلغ الخصم الثابت" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "النسبة المئوية للخصم" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "وقت انتهاء الصلاحية" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "وقت بدء الصلاحية" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "الطابع الزمني للاستخدام" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "المستخدم المعين" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "الرمز الترويجي" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "الرموز الترويجية" + +#: engine/core/models.py:1150 +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" +msgstr "تم استخدام الرمز الترويجي بالفعل" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "الرمز الترويجي المطبق" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "عنوان الشحن المستخدم لهذا الطلب" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "عنوان الشحن" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "الحالة الحالية للطلب في دورة حياته" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "حالة الطلب" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " +"استخدام عرض الجدول" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "المستخدم الذي قدم الطلب" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "المستخدم" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "الطابع الزمني عند الانتهاء من الطلب" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "وقت الشراء" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "معرّف يمكن قراءته من قبل البشر" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "الطلب" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} غير موجود مع الاستعلام <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "الرمز الترويجي غير موجود" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "العنوان غير موجود" + +#: 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 "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "قيمة القوة غير صالحة" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "لا يمكنك شراء طلبية فارغة!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "لا يمكنك شراء طلب بدون مستخدم!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "عدم كفاية الأموال لإكمال الطلب" + +#: engine/core/models.py:1575 +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}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "تعليقات على الملاحظات" + +#: engine/core/models.py:1719 +msgid "" +"references the specific product in an order that this feedback is about" +msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "منتجات الطلبات ذات الصلة" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "التصنيف المعين من قبل المستخدم للمنتج" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "تصنيف المنتج" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"يمثل المنتجات المرتبطة بالطلبات وسماتها. يحتفظ نموذج OrderProduct بمعلومات " +"حول المنتج الذي هو جزء من الطلب، بما في ذلك تفاصيل مثل سعر الشراء والكمية " +"وسمات المنتج وحالته. يدير الإشعارات للمستخدم والمسؤولين ويتعامل مع عمليات " +"مثل إرجاع رصيد المنتج أو إضافة ملاحظات. يوفر هذا النموذج أيضًا أساليب وخصائص" +" تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " +"للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "سعر الشراء وقت الطلب" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "التعليقات الداخلية" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "إشعارات المستخدم" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "تمثيل JSON لسمات هذا العنصر" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "سمات المنتج المطلوبة" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "ترتيب الوالدين" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "المنتج المحدد المرتبط بخط الطلب هذا" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "كمية هذا المنتج المحدد في الطلب" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "كمية المنتج" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "الحالة الحالية لهذا المنتج بالترتيب" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "حالة خط الإنتاج" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "الاسم" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "رابط التكامل" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "بيانات اعتماد المصادقة" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "إدارة علاقات العملاء" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "إدارة علاقات العملاء" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات" + +#: engine/core/models.py:1947 +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." +msgstr "" +"يمثل وظيفة التنزيل للأصول الرقمية المرتبطة بالطلبات. توفر فئة " +"DigitalAssetDownload القدرة على إدارة التنزيلات المتعلقة بمنتجات الطلبات " +"والوصول إليها. وتحتفظ بمعلومات حول منتج الطلب المرتبط، وعدد التنزيلات، وما " +"إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " +"عندما يكون الطلب المرتبط في حالة مكتملة." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "تنزيل" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "التنزيلات" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "يجب عليك تقديم تعليق، وتقييم، وطلب المنتج uuid لإضافة ملاحظاتك." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "الصفحة الرئيسية" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "اتصل بنا" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "نبذة عنا" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "مزيج العملاء (30 د)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "العملاء الجدد" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "العملاء العائدون" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "لا يوجد نشاط للعملاء في آخر 30 يوماً." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "المبيعات اليومية" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "الطلبات (منتهية)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "إجمالي الإيرادات" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "الطلبات" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "الإجمالي" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "لوحة التحكم" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "نظرة عامة على الدخل" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "صافي الإيرادات" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "الضرائب" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "المرتجعات" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "إجمالي الإيرادات" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "لا يوجد تاريخ" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "صافي الإيرادات" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "معدل الاسترداد" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "تم الإرجاع" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "مخزون منخفض" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "لا توجد عناصر منخفضة المخزون." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "معظم المنتجات المرتجعة (30 د)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "لا توجد مرتجعات في آخر 30 يوماً" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "أكثر المنتجات المرغوبة" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "لا توجد بيانات بعد." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "المنتج الأكثر شعبية" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "روابط سريعة" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "لا توجد روابط متاحة." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "مشحون مقابل رقمي (30 د)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "رقمي" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "تم الشحن" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "أعلى الفئات حسب الكمية (30 د)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "لم يتم بيع أي فئة في آخر 30 يوماً." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "تأكيد الطلب" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "الشعار" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "مرحباً %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"شكرًا لك على طلبك #%(order.pk)s! يسعدنا إبلاغك بأننا قد أخذنا طلبك في العمل." +" فيما يلي تفاصيل طلبك:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "الإجمالي" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "السعر الإجمالي" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "مع أطيب تحياتي،
فريق %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "جميع الحقوق محفوظة" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "تم تسليم الطلب" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "مرحباً %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "لقد قمنا بمعالجة طلبك بنجاح №%(order_uuid)s! فيما يلي تفاصيل طلبك:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"معلومات إضافية\n" +" معلومات إضافية" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "القيمة" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"إذا كانت لديك أي أسئلة، فلا تتردد في الاتصال بدعمنا على %(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "مع أطيب تحياتي،
فريق %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "المفتاح" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "إضافة صف" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "الرمز الترويجي الممنوح" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"شكراً لك على إقامتك معنا! لقد منحناك رمزاً ترويجياً\n" +" لـ" + +#: 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" +" the details of your order:" +msgstr "شكرًا لك على طلبك! يسعدنا تأكيد طلبك. فيما يلي تفاصيل طلبك:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "سعر الشحن" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "سيتم توصيل طلبك إلى العنوان التالي:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "مع أطيب تحياتي،
فريق %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"جميع الحقوق\n" +" محفوظة" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "كل من البيانات والمهلة مطلوبة" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | بادر بالاتصال بنا" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | تأكيد الطلب" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | طلبية تم تسليمها" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "يجب تكوين معلمة NOMINATIM_URL!" + +#: engine/core/validators.py:19 +#, 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} بكسل!" + +#: engine/core/views.py:91 +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:106 +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 "" +"يعالج استجابة العرض التفصيلي لخريطة الموقع. تقوم هذه الدالة بمعالجة الطلب، " +"وجلب استجابة تفاصيل خريطة الموقع المناسبة، وتعيين رأس نوع المحتوى ل XML." + +#: engine/core/views.py:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "إرجاع قائمة باللغات المدعومة والمعلومات الخاصة بها." + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "إرجاع معلمات الموقع الإلكتروني ككائن JSON." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"يعالج عمليات ذاكرة التخزين المؤقت مثل قراءة بيانات ذاكرة التخزين المؤقت " +"وتعيينها بمفتاح ومهلة محددة." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "يتعامل مع عمليات إرسال نموذج \"اتصل بنا\"." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"يعالج طلبات معالجة عناوين URL والتحقق من صحة عناوين URL من طلبات POST " +"الواردة." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "يتعامل مع استعلامات البحث العامة." + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل." + +#: engine/core/views.py:332 +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." +msgstr "" +"يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" +"تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "الطلب_برو_منتج_uuid مطلوب" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "طلب المنتج غير موجود" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "لا يحتوي منتج الطلب على منتج" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "الرمز المفضل غير موجود" + +#: engine/core/views.py:404 +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." +msgstr "" +"يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" +"تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." + +#: engine/core/views.py:416 +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 "" +"يعيد توجيه الطلب إلى صفحة فهرس المشرف. تعالج الدالة طلبات HTTP الواردة وتعيد" +" توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " +"Django للتعامل مع إعادة توجيه HTTP." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "إرجاع الإصدار الحالي من eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "الإيرادات والطلبات (آخر %(days)d)" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "إرجاع المتغيرات المخصصة للوحة التحكم." + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"يحدد مجموعة طرق عرض لإدارة العمليات المتعلقة ب Evibes. يرث صنف EvibesViewSet" +" من ModelViewSet ويوفر وظائف للتعامل مع الإجراءات والعمليات على كيانات " +"Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء " +"الحالي، والأذونات القابلة للتخصيص، وتنسيقات العرض." + +#: 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." +msgstr "" +"يمثل مجموعة طرق عرض لإدارة كائنات AttributeGroup. يتعامل مع العمليات " +"المتعلقة ب AttributeGroup، بما في ذلك التصفية والتسلسل واسترجاع البيانات. " +"تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر " +"طريقة موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"يعالج العمليات المتعلقة بكائنات السمة داخل التطبيق. يوفر مجموعة من نقاط " +"نهاية واجهة برمجة التطبيقات للتفاعل مع بيانات السمة. تدير هذه الفئة " +"الاستعلام عن كائنات السمة وتصفيتها وتسلسلها، مما يسمح بالتحكم الديناميكي في " +"البيانات التي يتم إرجاعها، مثل التصفية حسب حقول معينة أو استرجاع معلومات " +"مفصلة مقابل معلومات مبسطة حسب الطلب." + +#: 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." +msgstr "" +"مجموعة طرق عرض لإدارة كائنات AttributeValue. توفر مجموعة طرق العرض هذه وظائف" +" لإدراج كائنات AttributeValue واسترجاعها وإنشائها وتحديثها وحذفها. وهي " +"تتكامل مع آليات مجموعة طرق عرض Django REST Framework وتستخدم المتسلسلات " +"المناسبة للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال " +"DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"يدير طرق العرض للعمليات المتعلقة بالفئة. فئة CategoryViewSet مسؤولة عن " +"التعامل مع العمليات المتعلقة بنموذج الفئة في النظام. وهي تدعم استرجاع بيانات" +" الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول " +"المستخدمين المصرح لهم فقط إلى بيانات محددة." + +#: 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's ViewSet لتبسيط تنفيذ نقاط نهاية واجهة برمجة التطبيقات لكائنات " +"العلامة التجارية." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"يدير العمليات المتعلقة بنموذج \"المنتج\" في النظام. توفر هذه الفئة مجموعة " +"طرق عرض لإدارة المنتجات، بما في ذلك تصفيتها وتسلسلها وعملياتها على مثيلات " +"محددة. وهو يمتد من 'EvibesViewSet' لاستخدام الوظائف الشائعة ويتكامل مع إطار " +"عمل Django REST لعمليات RESTful API. يتضمن أساليب لاسترجاع تفاصيل المنتج، " +"وتطبيق الأذونات، والوصول إلى الملاحظات ذات الصلة بمنتج ما." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"يمثل مجموعة طرق عرض لإدارة كائنات المورد. تسمح مجموعة العرض هذه بجلب بيانات " +"البائع وتصفيتها وتسلسلها. وهي تُعرِّف مجموعة الاستعلام، وتكوينات التصفية، " +"وفئات أداة التسلسل المستخدمة للتعامل مع الإجراءات المختلفة. الغرض من هذه " +"الفئة هو توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل " +"Django REST." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"تمثيل مجموعة عرض تتعامل مع كائنات الملاحظات. تدير هذه الفئة العمليات " +"المتعلقة بكائنات الملاحظات، بما في ذلك الإدراج والتصفية واسترجاع التفاصيل. " +"الغرض من مجموعة العرض هذه هو توفير متسلسلات مختلفة لإجراءات مختلفة وتنفيذ " +"معالجة قائمة على الأذونات لكائنات الملاحظات التي يمكن الوصول إليها. وهي توسع" +" \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" +" البيانات." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet لإدارة الطلبات والعمليات ذات الصلة. توفر هذه الفئة وظائف لاسترداد " +"كائنات الطلبات وتعديلها وإدارتها. وهي تتضمن نقاط نهاية مختلفة للتعامل مع " +"عمليات الطلبات مثل إضافة أو إزالة المنتجات، وتنفيذ عمليات الشراء للمستخدمين " +"المسجلين وغير المسجلين، واسترجاع الطلبات المعلقة للمستخدم الحالي المصادق " +"عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " +"تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"يوفر مجموعة طرق عرض لإدارة كيانات OrderProduct. تتيح مجموعة طرق العرض هذه " +"عمليات CRUD وإجراءات مخصصة خاصة بنموذج OrderProduct. تتضمن التصفية، والتحقق " +"من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " +"توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " +"التطبيقات المختلفة." + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "يمثل مجموعة عرض لإدارة الترقيات." + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." + +#: 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 " +"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 لإدارة عمليات قائمة الرغبات. توفر مجموعة طرق عرض قائمة الأمنيات نقاط" +" نهاية للتفاعل مع قائمة أمنيات المستخدم، مما يسمح باسترجاع المنتجات وتعديلها" +" وتخصيصها ضمن قائمة الأمنيات. تسهل مجموعة العرض هذه وظائف مثل الإضافة " +"والإزالة والإجراءات المجمعة لمنتجات قائمة الرغبات. يتم دمج عمليات التحقق من " +"الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " +"ما لم يتم منح أذونات صريحة." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"توفر هذه الفئة وظيفة مجموعة طرق العرض لإدارة كائنات \"العنوان\". تتيح فئة " +"AddressViewSet عمليات CRUD والتصفية والإجراءات المخصصة المتعلقة بكيانات " +"العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " +"ومعالجة الأذونات بناءً على سياق الطلب." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "خطأ في الترميز الجغرافي: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"يعالج العمليات المتعلقة بعلامات المنتجات داخل التطبيق. توفر هذه الفئة وظيفة " +"استرجاع وتصفية وتسلسل كائنات وسم المنتج. وهي تدعم التصفية المرنة على سمات " +"محددة باستخدام الواجهة الخلفية للتصفية المحددة وتستخدم ديناميكيًا متسلسلات " +"مختلفة بناءً على الإجراء الذي يتم تنفيذه." diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo new file mode 100644 index 00000000..55e735d6 Binary files /dev/null and b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po new file mode 100644 index 00000000..0708276f --- /dev/null +++ b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -0,0 +1,3459 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: cs-cz\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Jedinečné ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"Jedinečné ID slouží k jisté identifikaci jakéhokoli databázového objektu." + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Je aktivní" + +#: engine/core/abstract.py:21 +msgid "" +"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í." + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Vytvořeno" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Kdy se objekt poprvé objevil v databázi" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Upraveno" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Kdy byl objekt naposledy upraven" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Překlady" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Obecné" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Vztahy" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "další informace" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Časová razítka" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Vybrané položky byly aktivovány!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Vybrané položky byly deaktivovány!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Hodnoty atributů" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Obrázek" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Obrázky" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stock" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Zásoby" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Objednat produkt" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Děti" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfigurace" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Jádro" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Dokončeno" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Poskytování služeb" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Doručeno na" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Zrušeno" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Neúspěšný" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Čeká se na" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Přijato" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Vrácené peníze" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Platba" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Úspěšné" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Schéma OpenAPI ve vybraném formátu s vybraným jazykem" + +#: engine/core/docs/drf/views.py:33 +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 "" +"Schéma OpenApi3 pro toto rozhraní API. Formát lze zvolit prostřednictvím " +"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:37 +msgid "cache I/O" +msgstr "Vstup/výstup mezipaměti" + +#: engine/core/docs/drf/views.py:46 +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 "" +"Použijte pouze klíč pro čtení povolených dat z mezipaměti.\n" +"Pro zápis dat do mezipaměti použijte klíč, data a časový limit s ověřením." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Získat seznam podporovaných jazyků" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Získání vystavitelných parametrů aplikace" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Vyžádejte si adresu URL s protokolem CORS. Povoleno pouze https." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Vyhledávání mezi produkty, kategoriemi a značkami" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Globální koncový bod vyhledávání pro dotazování napříč tabulkami projektu" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Zakoupit objednávku jako firma" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Zakoupit objednávku jako podnik s použitím zadaných `produktů` s " +"`product_uuid` a `atributy`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "stáhnout digitální aktivum ze zakoupené digitální objednávky" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Seznam všech skupin atributů (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Získání jedné skupiny atributů (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Vytvoření skupiny atributů" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Odstranění skupiny atributů" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +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" +msgstr "" +"Přepsání některých polí existující skupiny atributů s uložením " +"neupravitelných položek" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Seznam všech atributů (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Získání jednoho atributu (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Vytvoření atributu" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Odstranění atributu" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Přepsat existující atribut a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Přepsání některých polí existujícího atributu s uložením neupravitelných " +"položek" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Seznam všech hodnot atributů (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Získání jedné hodnoty atributu (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Vytvoření hodnoty atributu" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Odstranění hodnoty atributu" + +#: engine/core/docs/drf/viewsets.py:179 +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" +msgstr "" +"Přepsání některých polí existující hodnoty atributu s uložením " +"neupravitelných položek" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Seznam všech kategorií (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Vyhledání jedné kategorie (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "UUID nebo slug kategorie" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Vytvoření kategorie" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Odstranění kategorie" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Přepsání existující kategorie ukládající neupravitelné položky" + +#: 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 "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "Meta snímek SEO" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Vrací snímek meta dat SEO kategorie." + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Seznam všech kategorií (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Uživatelům, kteří nejsou zaměstnanci, se vracejí pouze jejich vlastní " +"objednávky." + +#: 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" +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" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Filtrování příkazů s buy_time >= toto datum ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrování objednávek s buy_time <= toto ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrování podle přesné objednávky UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtrování podle přesného lidsky čitelného ID objednávky" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filtrování podle e-mailu uživatele (přesná shoda bez rozlišení velkých a " +"malých písmen)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrování podle UUID uživatele" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filtrování podle stavu objednávky (shoda podřetězce bez rozlišování velkých " +"a malých písmen)" + +#: 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')." +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é " +"řazení použijte předponu \"-\" (např. \"-buy_time\")." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Vyhledání jedné kategorie (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Objednávka UUID nebo lidsky čitelné ID" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Vytvoření atributu" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Odstranění atributu" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Přepsání existující kategorie ukládající neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Nákupní cena v době objednávky" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"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 +msgid "retrieve current pending order of a user" +msgstr "načtení aktuální nevyřízené objednávky uživatele." + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "zakoupení objednávky bez vytvoření účtu" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "dokončí nákup objednávky pro neregistrovaného uživatele." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Přidání produktu do objednávky" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Přidá produkt do objednávky pomocí zadaného `product_uuid` a `attributes`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Přidat seznam produktů k objednání, množství se nezapočítává." + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Přidá seznam produktů do objednávky pomocí zadaného `product_uuid` a " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Odstranění produktu z objednávky" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Odebere produkt z objednávky pomocí zadaného `product_uuid` a `attributes`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Odstranění produktu z objednávky, množství se nezapočítává" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Odebere seznam produktů z objednávky pomocí zadaného `product_uuid` a " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Seznam všech atributů (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Uživatelům, kteří nejsou zaměstnanci, se vrátí pouze jejich vlastní seznamy " +"přání." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Získání jednoho atributu (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Vytvoření atributu" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Odstranění atributu" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Přepsat existující atribut a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Přepsání některých polí existujícího atributu s uložením neupravitelných " +"položek" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "načtení aktuálního čekajícího seznamu přání uživatele" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "načte aktuální čekající seznam přání ověřeného uživatele." + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Přidání produktu do objednávky" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "Přidá produkt do seznamu přání pomocí zadaného `product_uuid`." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Odstranění produktu ze seznamu přání" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "Odebere produkt ze seznamu přání pomocí zadaného `product_uuid`." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +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`." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Odstranění produktu z objednávky" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Odebere mnoho produktů ze seznamu přání pomocí zadaných `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" +"• **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" +"`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" +"Příklady: \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 +msgid "list all products (simple view)" +msgstr "Seznam všech produktů (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" +"**Povolené:** 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)" +msgstr "Vyhledání jednoho produktu (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "" +"Přepsání existujícího produktu se zachováním polí, která nelze editovat" + +#: 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 "" +"Aktualizace některých polí existujícího produktu se zachováním polí, která " +"nelze upravovat." + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Odstranění produktu" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "seznam všech povolených zpětných vazeb pro produkt" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Vrátí snímek meta dat SEO produktu." + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Seznam všech adres" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Získání jedné adresy" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Vytvoření nové adresy" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Odstranění adresy" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Aktualizace celé adresy" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Částečná aktualizace adresy" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Automatické dokončování zadávání adresy" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Řetězec dotazu na nezpracovaná data, doplňte prosím data z koncového bodu " +"geo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "omezuje množství výsledků, 1 < limit < 10, výchozí: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "seznam všech ohlasů (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "načtení jedné zpětné vazby (podrobné zobrazení)." + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "vytvořit zpětnou vazbu" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "odstranit zpětnou vazbu" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "přepsat existující zpětnou vazbu a uložit neupravitelné položky." + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "seznam všech vztahů objednávka-produkt (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "načtení jednoho vztahu zakázka-produkt (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "vytvořit nový vztah objednávka-produkt" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "nahradit existující vztah objednávka-produkt" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "částečně aktualizovat existující vztah objednávka-produkt" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "odstranit vztah objednávka-produkt" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Seznam všech značek (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Získání jedné značky (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Značka UUID nebo slimák" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Vytvoření značky" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Odstranění značky" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Přepsání existující značky s uložením neupravitelných položek" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Seznam všech prodejců (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Získání jednoho prodejce (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Vytvoření prodejce" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Odstranění prodejce" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Přepsání existujícího dodavatele s uložením neupravitelných položek" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Seznam všech obrázků produktu (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Získání jednoho obrázku produktu (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Vytvoření obrázku produktu" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Odstranění obrázku produktu" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Přepsání existujícího obrázku produktu s uložením neupravitelných položek" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Seznam všech propagačních kódů (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Získání jednoho propagačního kódu (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Vytvoření propagačního kódu" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Odstranění propagačního kódu" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Přepsání stávajícího propagačního kódu, který není určen k úpravám" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Seznam všech propagačních akcí (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Získání jednoho povýšení (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Vytvořit propagaci" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +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" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Seznam všech zásob (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Získání jedné zásoby (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Vytvoření skladového záznamu" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Odstranění skladového záznamu" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Přepsání existujícího skladového záznamu s uložením neupravitelných položek" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Seznam všech značek produktu (jednoduché zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Získání jedné značky produktu (podrobné zobrazení)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Vytvoření značky produktu" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +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" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Přepsat některá pole existující kategorie a uložit neupravitelné položky" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Nebyl zadán žádný vyhledávací termín." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Vyhledávání" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Název" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Kategorie" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Kategorie Slimáci" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Štítky" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Minimální cena" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Max Price" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Je aktivní" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Značka" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Atributy" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Množství" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Slug" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Je digitální" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Zahrnout podkategorie" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Zahrnout osobně objednané produkty" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Pro použití příznaku include_subcategories musí existovat category_uuid." + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Koupeno po (včetně)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Koupeno před (včetně)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "E-mail uživatele" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID uživatele" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Stav" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Lidsky čitelné ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Rodič" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Úroveň" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID produktu" + +#: 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:41 +msgid "data to store in cache" +msgstr "Data k uložení do mezipaměti" + +#: 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:47 +msgid "cached data" +msgstr "Data uložená v mezipaměti" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Přidání produktu do objednávky" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Odstranění všech produktů z objednávky" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Koupit objednávku" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Odebrat/přidat" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Zadejte prosím hodnotu `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Přidání produktu do objednávky" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Odstranění produktu z objednávky" + +#: 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:510 +msgid "buy a product" +msgstr "Koupit objednávku" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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." + +#: 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:573 +msgid "action must be either `add` or `remove`" +msgstr "Akce musí být buď `add` nebo `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Původní řetězec adresy zadaný uživatelem" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} neexistuje: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - funguje jako kouzlo" + +#: 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:95 +msgid "grouped attributes" +msgstr "Seskupené atributy" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Skupiny atributů" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Značky" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Kategorie" + +#: 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: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: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." + +#: engine/core/graphene/object_types.py:205 +msgid "tags for this category" +msgstr "Štítky pro tuto kategorii" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produkty v této kategorii" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Prodejci" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Zeměpisná šířka (souřadnice Y)" + +#: 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:358 +msgid "comment" +msgstr "Jak na to" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Představuje zpětnou vazbu od uživatele." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Zpětná vazba" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Fakturační adresa" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Celková cena této objednávky" + +#: 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: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:419 +msgid "transactions for this order" +msgstr "Transakce pro tuto objednávku" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Objednávky" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Adresa URL obrázku" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Obrázky produktu" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Zpětná vazba" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Skupiny atributů" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Cena" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Množství" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Počet zpětných vazeb" + +#: 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:484 +msgid "discount price" +msgstr "Cena se slevou" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produkty" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Propagační kódy" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produkty v prodeji" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Propagační akce" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Prodejce" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produkt" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Seznamy přání" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Produkty s příznakem" + +#: 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:665 +msgid "tagged categories" +msgstr "Kategorie s příznakem" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Štítky kategorií" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Název projektu" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Název společnosti" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Adresa společnosti" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Telefonní číslo společnosti" + +#: 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:681 +msgid "email host user" +msgstr "Uživatel hostitelského e-mailu" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Maximální částka pro platbu" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Minimální částka pro platbu" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analytická data" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Reklamní údaje" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Konfigurace" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Kód jazyka" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Název jazyka" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Příznak jazyka, pokud existuje :)" + +#: 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 +msgid "products search results" +msgstr "Výsledky vyhledávání produktů" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Výsledky vyhledávání produktů" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Reprezentuje skupinu atributů, která může být hierarchická. Tato třída " +"slouží ke správě a organizaci skupin atributů. Skupina atributů může mít " +"nadřazenou skupinu, která tvoří hierarchickou strukturu. To může být " +"užitečné pro efektivnější kategorizaci a správu atributů v komplexním " +"systému." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Rodič této skupiny" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Nadřazená skupina atributů" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Název skupiny atributů" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Skupina atributů" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Představuje entitu dodavatele, která může uchovávat informace o externích " +"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é " +"komunikují s prodejci třetích stran." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Ukládá pověření a koncové body potřebné pro komunikaci s rozhraním API " +"dodavatele." + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Informace o ověřování" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Definice přirážky pro produkty získané od tohoto dodavatele" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Procento přirážky prodejce" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Název tohoto prodejce" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Název prodejce" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "soubor s odpovědí" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "poslední odpověď prodejce na zpracování" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Cesta k integračnímu souboru prodejce" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Cesta integrace" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Představuje značku produktu používanou pro klasifikaci nebo identifikaci " +"produktů. Třída ProductTag je určena k jedinečné identifikaci a klasifikaci " +"produktů pomocí kombinace interního identifikátoru značky a uživatelsky " +"přívětivého zobrazovacího názvu. Podporuje operace exportované " +"prostřednictvím mixinů a poskytuje přizpůsobení metadat pro účely správy." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Interní identifikátor značky produktu" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Název štítku" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Uživatelsky přívětivý název pro značku produktu" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Zobrazení názvu štítku" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Štítek produktu" + +#: engine/core/models.py:229 +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 "" +"Představuje značku kategorie používanou pro produkty. Tato třída modeluje " +"značku kategorie, kterou lze použít k přiřazení a klasifikaci produktů. " +"Obsahuje atributy pro interní identifikátor značky a uživatelsky přívětivý " +"zobrazovací název." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "značka kategorie" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "štítky kategorií" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Představuje entitu kategorie pro uspořádání a seskupení souvisejících " +"položek v hierarchické struktuře. Kategorie mohou mít hierarchické vztahy s " +"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 " +"kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo " +"priorita." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Nahrát obrázek reprezentující tuto kategorii" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Obrázek kategorie" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Definovat procento přirážky pro produkty v této kategorii." + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu." + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Nadřazená kategorie" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Název kategorie" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Uveďte název této kategorie" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Přidejte podrobný popis této kategorie" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Popis kategorie" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Priorita" + +#: engine/core/models.py:438 +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." +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, " +"přidružených kategorií, jedinečného slugu a pořadí důležitosti. Umožňuje " +"organizaci a reprezentaci dat souvisejících se značkou v rámci aplikace." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Název této značky" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Název značky" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Nahrát logo reprezentující tuto značku" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Malý obrázek značky" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Nahrát velké logo reprezentující tuto značku" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Velká image značky" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Přidejte podrobný popis značky" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Popis značky" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Volitelné kategorie, se kterými je tato značka spojena" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Představuje zásobu produktu spravovaného v systému. Tato třída poskytuje " +"podrobnosti o vztazích mezi dodavateli, produkty a informacemi o jejich " +"zásobách a také o vlastnostech souvisejících se zásobami, jako je cena, " +"nákupní cena, množství, SKU a digitální aktiva. Je součástí systému správy " +"zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých " +"dodavatelů." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Prodejce dodávající tento výrobek na sklad" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Přidružený prodejce" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Konečná cena pro zákazníka po přirážkách" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Prodejní cena" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Produkt spojený s touto skladovou položkou" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Související produkt" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Cena zaplacená prodejci za tento výrobek" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Kupní cena prodejce" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Dostupné množství produktu na skladě" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Množství na skladě" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU přidělený prodejcem pro identifikaci výrobku" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "SKU prodejce" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Digitální soubor spojený s touto zásobou, je-li to vhodné" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digitální soubor" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Atributy systému" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Zápisy do zásob" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Reprezentuje produkt s atributy, jako jsou kategorie, značka, značky, " +"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 " +"informacemi v rámci aplikace." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Kategorie, do které tento produkt patří" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Volitelně přiřadit tento produkt ke značce" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Označuje, zda je tento produkt dodáván digitálně" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Je produkt digitální" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Uveďte jasný identifikační název výrobku" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Název produktu" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Přidejte podrobný popis produktu" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Popis produktu" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Číslo dílu pro tento produkt" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Číslo dílu" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Skladová jednotka pro tento produkt" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"Reprezentuje atribut v systému. Tato třída slouží k definování a správě " +"atributů, což jsou přizpůsobitelné části dat, které lze přiřadit k jiným " +"entitám. Atributy mají přiřazené kategorie, skupiny, typy hodnot a názvy. " +"Model podporuje více typů hodnot, včetně řetězce, celého čísla, floatu, " +"booleanu, pole a objektu. To umožňuje dynamické a flexibilní strukturování " +"dat." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Skupina tohoto atributu" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Řetězec" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Celé číslo" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Float" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolean" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Pole" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objekt" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Typ hodnoty atributu" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Typ hodnoty" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Název tohoto atributu" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Název atributu" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "je filtrovatelný" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "určuje, zda lze tento atribut použít pro filtrování, nebo ne." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +msgstr "" +"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 +msgid "attribute of this value" +msgstr "Atribut této hodnoty" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Text alt obrázku" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Nahrát soubor s obrázkem tohoto produktu" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Obrázek produktu" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Určuje pořadí, v jakém se obrázky zobrazují." + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Priorita zobrazení" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Výrobek, který tento obrázek představuje" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Obrázky produktů" + +#: engine/core/models.py:868 +msgid "" +"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." +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 " +"katalogem produktů, aby bylo možné určit položky, kterých se kampaň týká." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Procentuální sleva na vybrané produkty" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Procento slevy" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Uveďte jedinečný název této propagační akce" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Název akce" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Popis propagace" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Vyberte, které produkty jsou zahrnuty do této akce" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Zahrnuté produkty" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Propagace" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Představuje seznam přání uživatele pro ukládání a správu požadovaných " +"produktů. Třída poskytuje funkce pro správu kolekce produktů, podporuje " +"operace, jako je přidávání a odebírání produktů, a také operace pro " +"přidávání a odebírání více produktů najednou." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Výrobky, které uživatel označil jako požadované" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Uživatel, který vlastní tento seznam přání" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Majitel seznamu přání" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Seznam přání" + +#: engine/core/models.py:985 +msgid "" +"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." +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, " +"včetně nahrávání souborů a jejich metadat. Obsahuje metody a vlastnosti pro " +"zpracování typu souboru a cesty k uložení souborů dokumentů. Rozšiřuje " +"funkčnost konkrétních mixinů a poskytuje další vlastní funkce." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Dokumentární film" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Dokumentární filmy" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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 " +"uživateli, což usnadňuje personalizované zpracování dat." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Adresní řádek pro zákazníka" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Adresní řádek" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Ulice" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Okres" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Město" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Poštovní směrovací číslo" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Země" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Uložená odpověď JSON ze služby geokódování" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adresa" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresy" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Představuje propagační kód, který lze použít pro slevy, spravuje jeho " +"platnost, typ slevy a použití. Třída PromoCode uchovává podrobnosti o " +"propagačním kódu, včetně jeho jedinečného identifikátoru, vlastností slevy " +"(částka nebo procento), doby platnosti, přidruženého uživatele (pokud " +"existuje) a stavu jeho použití. Obsahuje funkce pro ověření platnosti a " +"použití propagačního kódu na objednávku při zajištění splnění omezení." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Jedinečný kód, který uživatel použije k uplatnění slevy." + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Identifikátor propagačního kódu" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Pevná výše slevy, pokud není použito procento" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Pevná výše slevy" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Procentuální sleva uplatněná v případě nevyužití pevné částky" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Procentuální sleva" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Časové razítko ukončení platnosti promokódu" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Doba ukončení platnosti" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Časové razítko, od kterého je tento promokód platný" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Čas zahájení platnosti" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "Časové razítko použití promokódu, prázdné, pokud ještě nebyl použit." + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Časové razítko použití" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Uživatel přiřazený k tomuto promokódu, je-li to relevantní" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Přiřazený uživatel" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Propagační kód" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Propagační kódy" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Měl by být definován pouze jeden typ slevy (částka nebo procento), nikoli " +"však oba typy slev nebo žádný z nich." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promo kód byl již použit" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Neplatný typ slevy pro promokód {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Představuje objednávku zadanou uživatelem. Tato třída modeluje objednávku v " +"rámci aplikace, včetně jejích různých atributů, jako jsou fakturační a " +"přepravní informace, stav, přidružený uživatel, oznámení a související " +"operace. Objednávky mohou mít přiřazené produkty, lze na ně aplikovat " +"propagační akce, nastavovat adresy a aktualizovat údaje o dopravě nebo " +"fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu " +"objednávky." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Fakturační adresa použitá pro tuto objednávku" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Volitelný promo kód použitý na tuto objednávku" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Použitý promo kód" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Dodací adresa použitá pro tuto objednávku" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Dodací adresa" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Aktuální stav zakázky v jejím životním cyklu" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Stav objednávky" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON struktura oznámení pro zobrazení uživatelům, v uživatelském rozhraní " +"administrátora se používá tabulkové zobrazení." + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Uživatel, který zadal objednávku" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Uživatel" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Časové razítko, kdy byla objednávka dokončena." + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Kupte si čas" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Lidsky čitelný identifikátor objednávky" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "lidsky čitelné ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Objednávka" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Uživatel smí mít vždy pouze jednu čekající objednávku!" + +#: 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." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Do objednávky nelze přidat neaktivní produkty" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Nelze přidat více produktů, než je dostupné na skladě" + +#: 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 "Nelze odebrat produkty z objednávky, která není nevyřízená." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} neexistuje s dotazem <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promo kód neexistuje" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "Fyzické produkty můžete zakoupit pouze se zadanou dodací adresou!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adresa neexistuje" + +#: 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 "" +"V tuto chvíli nemůžete nakupovat, zkuste to prosím znovu za několik minut." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Neplatná hodnota síly" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Nelze zakoupit prázdnou objednávku!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Bez uživatele nelze objednávku zakoupit!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Uživatel bez zůstatku nemůže nakupovat se zůstatkem!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Nedostatek finančních prostředků na dokončení objednávky" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"bez registrace nelze nakupovat, uveďte prosím následující údaje: jméno " +"zákazníka, e-mail zákazníka, telefonní číslo zákazníka." + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Neplatný způsob platby: {payment_method} z {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"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 " +"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." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Odkazuje na konkrétní produkt v objednávce, kterého se tato zpětná vazba " +"týká." + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Související objednávka produktu" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Hodnocení produktu přidělené uživatelem" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Hodnocení produktu" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Reprezentuje produkty spojené s objednávkami a jejich atributy. Model " +"OrderProduct uchovává informace o produktu, který je součástí objednávky, " +"včetně podrobností, jako je kupní cena, množství, atributy produktu a stav. " +"Spravuje oznámení pro uživatele a správce a zpracovává operace, jako je " +"vrácení zůstatku produktu nebo přidání zpětné vazby. Tento model také " +"poskytuje metody a vlastnosti, které podporují obchodní logiku, například " +"výpočet celkové ceny nebo generování adresy URL ke stažení u digitálních " +"produktů. Model se integruje s modely objednávek a produktů a ukládá na ně " +"odkaz." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Cena, kterou zákazník zaplatil za tento produkt v době nákupu." + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Nákupní cena v době objednávky" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Interní připomínky" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Oznámení uživatele" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON reprezentace atributů této položky" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Objednané atributy produktu" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Objednávka rodičů" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Konkrétní produkt spojený s touto objednávkou" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Množství tohoto konkrétního produktu v objednávce" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Množství produktu" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Aktuální stav tohoto produktu v objednávce" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Stav produktové řady" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct musí mít přiřazenou objednávku!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "nelze poskytnout zpětnou vazbu na objednávku, která nebyla přijata" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Název" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "Adresa URL integrace" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Ověřovací pověření" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Odkaz na CRM objednávky" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Odkazy CRM objednávek" + +#: engine/core/models.py:1947 +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." +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 " +"stahování související s produkty objednávek. Udržuje informace o " +"souvisejícím produktu objednávky, počtu stažení a o tom, zda je aktivum " +"veřejně viditelné. Obsahuje metodu pro generování adresy URL pro stažení " +"aktiva, když je přidružená objednávka ve stavu dokončena." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Stáhnout" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Ke stažení na" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"pro přidání zpětné vazby musíte uvést komentář, hodnocení a uuid produktu." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Home" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Kontaktujte nás" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "O nás" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Směs zákazníků (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Noví zákazníci" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Vracející se zákazníci" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Žádná aktivita zákazníka za posledních 30 dní." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Denní prodej" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Objednávky (DOKONČENO)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Hrubé příjmy" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Objednávky" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Hrubý" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Přístrojová deska" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Přehled příjmů" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Čistý příjem" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Daně" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Vrací se" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Hrubé příjmy" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Bez data" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Čistý příjem" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Míra vrácení peněz" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Vrácené" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Nízké zásoby" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Žádné nízké skladové zásoby." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Nejvíce vrácených výrobků (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Za posledních 30 dní jste nevrátili žádné zboží." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Nejžádanější produkt" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Zatím nejsou k dispozici žádné údaje." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Nejoblíbenější produkt" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Rychlé odkazy" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Nejsou k dispozici žádné odkazy." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Odeslané vs. digitální (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digitální" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Odesláno" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Hlavní kategorie podle množství (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Žádný prodej v kategorii za posledních 30 dní." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Správce webu Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Potvrzení objednávky" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Ahoj %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Děkujeme vám za vaši objednávku #%(order.pk)s! S potěšením Vám oznamujeme, " +"že jsme Vaši objednávku převzali do práce. Níže jsou uvedeny údaje o vaší " +"objednávce:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Celkem" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Celková cena" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"V případě dotazů se obraťte na naši podporu na adrese " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "S pozdravem,
tým %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Všechna práva vyhrazena" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Dodaná objednávka" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Ahoj %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Úspěšně jsme zpracovali vaši objednávku №%(order_uuid)s! Níže jsou uvedeny " +"podrobnosti vaší objednávky:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"další\n" +" informace" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Hodnota" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"V případě dotazů se můžete obrátit na naši podporu na adrese " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "S pozdravem,
tým %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Klíč" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Přidat řádek" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Udělený propagační kód" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Děkujeme, že jste s námi zůstali! Udělili jsme vám promocode\n" +" pro" + +#: 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" +" 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 " +"jsou uvedeny údaje o vaší objednávce:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Cena přepravy" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Vaše objednávka bude doručena na následující adresu:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "S pozdravem,
Tým %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"všechna práva\n" +" vyhrazeno" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Jsou vyžadována data i časový limit" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund." + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +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 "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | potvrzení objednávky" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | doručená objednávka" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "K provedení této akce nemáte oprávnění." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Parametr NOMINATIM_URL musí být nakonfigurován!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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:106 +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 "" +"Zpracovává odpověď podrobného zobrazení pro mapu webu. Tato funkce zpracuje " +"požadavek, načte příslušnou podrobnou odpověď mapy stránek a nastaví " +"hlavičku Content-Type pro XML." + +#: engine/core/views.py:141 +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:173 +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:192 +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." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Zpracovává odeslání formuláře `contact us`." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +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:280 +msgid "Handles global search queries." +msgstr "Zpracovává globální vyhledávací dotazy." + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "Řeší logiku nákupu jako firmy bez registrace." + +#: engine/core/views.py:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid je povinné" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "objednávka produktu neexistuje" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Digitální aktivum můžete stáhnout pouze jednou" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Objednaný produkt nemá produkt" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon nebyl nalezen" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"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." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Vrací aktuální verzi systému eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Příjmy a objednávky (poslední %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +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í." + +#: 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." +msgstr "" +"Představuje sadu pohledů pro správu objektů AttributeGroup. Zpracovává " +"operace související s AttributeGroup, včetně filtrování, serializace a " +"načítání dat. Tato třída je součástí vrstvy API aplikace a poskytuje " +"standardizovaný způsob zpracování požadavků a odpovědí pro data " +"AttributeGroup." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Zpracovává operace související s objekty atributů v rámci aplikace. " +"Poskytuje sadu koncových bodů API pro interakci s daty atributů. Tato třída " +"spravuje dotazování, filtrování a serializaci objektů Attribute a umožňuje " +"dynamickou kontrolu nad vrácenými daty, například filtrování podle " +"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: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." +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ů " +"AttributeValue. Integruje se s mechanismy viewsetu frameworku Django REST a " +"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:213 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Spravuje zobrazení pro operace související s kategorií. Třída " +"CategoryViewSet je zodpovědná za zpracování operací souvisejících s modelem " +"Category v systému. Podporuje načítání, filtrování a serializaci dat " +"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: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 "" +"Představuje sadu pohledů pro správu instancí značky. Tato třída poskytuje " +"funkce pro dotazování, filtrování a serializaci objektů značky. Používá " +"rámec ViewSet Djanga pro zjednodušení implementace koncových bodů API pro " +"objekty Brand." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Spravuje operace související s modelem `Product` v systému. Tato třída " +"poskytuje sadu pohledů pro správu produktů, včetně jejich filtrování, " +"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." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Představuje sadu pohledů pro správu objektů prodejce. Tato sada pohledů " +"umožňuje načítání, filtrování a serializaci dat prodejce. Definuje sadu " +"dotazů, konfigurace filtrů a třídy serializátorů používané pro zpracování " +"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: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 " +"use of Django's filtering system for querying data." +msgstr "" +"Reprezentace sady zobrazení, která zpracovává objekty zpětné vazby. Tato " +"třída spravuje operace související s objekty zpětné vazby, včetně výpisu, " +"filtrování a načítání podrobností. Účelem této sady zobrazení je poskytnout " +"různé serializátory pro různé akce a implementovat manipulaci s přístupnými " +"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: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 " +"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." + +#: 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 " +"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é " +"vazby na instance OrderProduct" + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " +"akcí API." + +#: 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: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: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 " +"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 pro správu operací seznamu přání. Sada WishlistViewSet poskytuje " +"koncové body pro interakci se seznamem přání uživatele a umožňuje načítat, " +"upravovat a přizpůsobovat produkty v seznamu přání. Tato sada ViewSet " +"usnadňuje funkce, jako je přidávání, odebírání a hromadné akce pro produkty " +"seznamu přání. Jsou integrovány kontroly oprávnění, které zajišťují, že " +"uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " +"udělena výslovná oprávnění." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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, " +"přepisování serializátoru a zpracování oprávnění na základě kontextu " +"požadavku." + +#: 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:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +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." diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.mo b/engine/core/locale/da_DK/LC_MESSAGES/django.mo new file mode 100644 index 00000000..e5e008a1 Binary files /dev/null and b/engine/core/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.po b/engine/core/locale/da_DK/LC_MESSAGES/django.po new file mode 100644 index 00000000..8b9c4c88 --- /dev/null +++ b/engine/core/locale/da_DK/LC_MESSAGES/django.po @@ -0,0 +1,3490 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: da-dk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Unikt ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "Unikt ID bruges til sikkert at identificere ethvert databaseobjekt" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Er aktiv" + +#: engine/core/abstract.py:21 +msgid "" +"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." + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Oprettet" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Da objektet første gang dukkede op i databasen" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modificeret" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Hvornår objektet sidst blev redigeret" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Oversættelser" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Generelt" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relationer" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "Yderligere info" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Tidsstempler" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Udvalgte varer er blevet aktiveret!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Udvalgte varer er blevet deaktiveret!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Attributværdier" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Billede" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Billeder" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Lager" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Aktier" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Bestil produkt" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Børn" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfig" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Kerne" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Færdig" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Leverer" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Leveret" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Annulleret" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Mislykket" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Afventer" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Accepteret" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Penge returneret" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Betaling" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Succesfuld" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "OpenAPI-skema i valgt format med valgt sprog" + +#: engine/core/docs/drf/views.py:33 +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 "" +"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:37 +msgid "cache I/O" +msgstr "Cache-I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Få en liste over understøttede sprog" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Hent applikationens eksponerbare parametre" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Anmod om en CORSed URL. Kun https er tilladt." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Søg mellem produkter, kategorier og mærker" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Globalt søgepunkt til at søge på tværs af projektets tabeller" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Køb en ordre som virksomhed" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Køb en ordre som en virksomhed ved hjælp af de angivne `produkter` med " +"`produkt_uuid` og `attributter`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "Download et digitalt aktiv fra en købt digital ordre" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Liste over alle attributgrupper (simpel visning)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Hent en enkelt attributgruppe (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Opret en attributgruppe" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Slet en attributgruppe" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Omskriv en eksisterende attributgruppe, der gemmer ikke-redigerbare " +"attributter" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Liste over alle attributter (simpel visning)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Hent en enkelt attribut (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Opret en attribut" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Slet en attribut" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Liste over alle attributværdier (simpel visning)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Hent en enkelt attributværdi (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Opret en attributværdi" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Slet en attributværdi" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +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" +msgstr "" +"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)" +msgstr "Liste over alle kategorier (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Hent en enkelt kategori (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Kategori UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Opret en kategori" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Slet en kategori" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer" + +#: 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 "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO-meta-snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returnerer et øjebliksbillede af kategoriens SEO-metadata" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +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." + +#: 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" +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" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Filtrer ordrer med buy_time >= denne ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrer ordrer med buy_time <= denne ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrer efter nøjagtig ordre-UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtrer efter nøjagtigt menneskeligt læsbart ordre-ID" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "Filtrer efter brugerens e-mail (case-insensitive exact match)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrer efter brugerens UUID" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +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')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Hent en enkelt kategori (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Bestil UUID eller menneskeligt læsbart id" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Opret en attribut" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Virker ikke for ikke-ansatte brugere." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Slet en attribut" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Købspris på bestillingstidspunktet" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Afslutter købet af ordren. Hvis `force_balance` bruges, gennemføres købet " +"ved hjælp af brugerens saldo; hvis `force_payment` bruges, igangsættes en " +"transaktion." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "Hent en brugers aktuelle afventende ordre" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "Køb en ordre uden at oprette en konto" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "afslutter ordrekøbet for en ikke-registreret bruger." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Tilføj et produkt til ordren" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Tilføjer et produkt til en ordre ved hjælp af de angivne `product_uuid` og " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Tilføj en liste med produkter til bestilling, antal tæller ikke med" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Tilføjer en liste af produkter til en ordre ved hjælp af de angivne " +"`product_uuid` og `attributes`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Fjern et produkt fra ordren" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Fjerner et produkt fra en ordre ved hjælp af de angivne `product_uuid` og " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Fjern et produkt fra ordren, mængderne tæller ikke med" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Fjerner en liste af produkter fra en ordre ved hjælp af de angivne " +"`product_uuid` og `attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Liste over alle attributter (simpel visning)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"For ikke-ansatte brugere er det kun deres egne ønskelister, der returneres." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Hent en enkelt attribut (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Opret en attribut" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Virker ikke for ikke-ansatte brugere." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Slet en attribut" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "Hent en brugers aktuelle ventende ønskeliste" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "henter en aktuel afventende ønskeliste for en autentificeret bruger" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Tilføj et produkt til ordren" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Tilføjer et produkt til en ønskeliste ved hjælp af den angivne " +"`product_uuid`." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +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`." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Tilføj mange produkter til ønskelisten" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Tilføjer mange produkter til en ønskeliste ved hjælp af de angivne " +"`product_uuids`." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Fjern et produkt fra ordren" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Fjerner mange produkter fra en ønskeliste ved hjælp af de angivne " +"`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" +"• **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" +"`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" +"Eksempler på dette: \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 +msgid "list all products (simple view)" +msgstr "Liste over alle produkter (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" +"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 +msgid "retrieve a single product (detailed view)" +msgstr "Hent et enkelt produkt (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Omskriv et eksisterende produkt og bevar ikke-redigerbare felter" + +#: 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 "" +"Opdater nogle felter i et eksisterende produkt og bevar ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Slet et produkt" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "viser alle tilladte tilbagemeldinger for et produkt" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Returnerer et øjebliksbillede af produktets SEO-metadata" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Angiv alle adresser" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Hent en enkelt adresse" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Opret en ny adresse" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Slet en adresse" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Opdater en hel adresse" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Delvis opdatering af en adresse" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Automatisk udfyldning af adresseinput" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "Rå dataforespørgselsstreng, tilføj venligst data fra geo-IP-slutpunkt" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "begrænser mængden af resultater, 1 < grænse < 10, standard: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "Vis alle tilbagemeldinger (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "Hent en enkelt feedback (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "skab en feedback" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "Slet en tilbagemelding" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "omskriv en eksisterende feedback, der gemmer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "liste alle ordre-produkt-relationer (simpel visning)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "Hent en enkelt ordre-produkt-relation (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "Opret en ny ordre-produkt-relation" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "erstatte en eksisterende ordre-produkt-relation" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "delvist opdatere en eksisterende ordre-produkt-relation" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "slette en ordre-produkt-relation" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Liste over alle mærker (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Hent et enkelt mærke (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Brand UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Skab et brand" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Slet et brand" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Omskrivning af et eksisterende brand, der gemmer non-editables" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Liste over alle leverandører (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Hent en enkelt leverandør (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Opret en leverandør" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Slet en leverandør" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Omskriv en eksisterende leverandør, der gemmer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Vis alle produktbilleder (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Hent et enkelt produktbillede (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Skab et produktbillede" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Slet et produktbillede" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Omskriv et eksisterende produktbillede og gem ikke-redigerbare elementer" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Liste over alle kampagnekoder (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Hent en enkelt kampagnekode (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Opret en kampagnekode" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Slet en kampagnekode" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Omskriv en eksisterende kampagnekode og gem ikke-redigerbare koder" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Liste over alle kampagner (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Hent en enkelt forfremmelse (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Opret en kampagne" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Slet en forfremmelse" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Omskriv en eksisterende kampagne og gem ikke-redigerbare elementer" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Liste over alle aktier (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Hent et enkelt lager (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Opret en lagerpost" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Slet en lagerpost" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "Omskriv en eksisterende lagerpost og gem ikke-redigerbare varer" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Liste over alle produkttags (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Hent et enkelt produkttag (detaljeret visning)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Opret et produkttag" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Slet et produkttag" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Omskriv et eksisterende produkttag og gem ikke-redigerbare ting" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " +"felter" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Der er ikke angivet noget søgeord." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Søg efter" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Navn" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Kategorier" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Kategorier Snegle" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tags" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Min. pris" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Maks. pris" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Er aktiv" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Brand" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Egenskaber" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Mængde" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Snegl" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Er digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Inkluder underkategorier" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Inkluder personligt bestilte produkter" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "VARENUMMER" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Der skal være en category_uuid for at bruge include_subcategories-flaget" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Søg (ID, produktnavn eller reservedelsnummer)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Købt efter (inklusive)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Købt før (inklusive)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Brugerens e-mail" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "Bruger UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Menneskeligt læsbart ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Forælder" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Hele kategorien (har mindst 1 produkt eller ej)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Niveau" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Produkt UUID" + +#: 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:41 +msgid "data to store in cache" +msgstr "Data, der skal gemmes i cachen" + +#: 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:47 +msgid "cached data" +msgstr "Cachelagrede data" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Tilføj et produkt til ordren" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Fjern alle produkter fra ordren" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Køb en ordre" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Fjern/tilføj" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Angiv venligst værdien `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Tilføj et produkt til ordren" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "Fjern et produkt fra ordren" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "Fjern et produkt fra ordren" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "Fjern et produkt fra ordren" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "Køb en ordre" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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" + +#: 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:573 +msgid "action must be either `add` or `remove`" +msgstr "Handlingen skal være enten `add` eller `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Original adressestreng leveret af brugeren" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} findes ikke: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - fungerer som en charme" + +#: 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:95 +msgid "grouped attributes" +msgstr "Grupperede attributter" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Grupper af attributter" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Mærker" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Kategorier" + +#: 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: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." + +#: 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:205 +msgid "tags for this category" +msgstr "Tags for denne kategori" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produkter i denne kategori" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Leverandører" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Breddegrad (Y-koordinat)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Længdegrad (X-koordinat)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Sådan gør du" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Repræsenterer feedback fra en bruger." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Feedback" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Faktureringsadresse" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Samlet pris for denne ordre" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Er alle produkterne i ordren digitale?" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Transaktioner for denne ordre" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Bestillinger" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Billed-URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Produktets billeder" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Tilbagemeldinger" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Attributgrupper" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Pris" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Mængde" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Antal tilbagemeldinger" + +#: 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:484 +msgid "discount price" +msgstr "Rabatpris" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produkter" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promokoder" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produkter til salg" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Kampagner" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Leverandør" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produkt" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Ønskelister" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Mærkede produkter" + +#: 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:665 +msgid "tagged categories" +msgstr "Tagged kategorier" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Kategoriernes tags" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Projektets navn" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Virksomhedens navn" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Virksomhedens adresse" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Virksomhedens telefonnummer" + +#: 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:681 +msgid "email host user" +msgstr "E-mail-værtsbruger" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Maksimalt beløb til betaling" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Minimumsbeløb for betaling" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analytiske data" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Data om reklamer" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Konfiguration" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Sprogkode" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Sprogets navn" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Sprogflag, hvis det findes :)" + +#: 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 +msgid "products search results" +msgstr "Søgeresultater for produkter" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Søgeresultater for produkter" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Repræsenterer en gruppe af attributter, som kan være hierarkiske. Denne " +"klasse bruges til at administrere og organisere attributgrupper. En " +"attributgruppe kan have en overordnet gruppe, som danner en hierarkisk " +"struktur. Dette kan være nyttigt til at kategorisere og styre attributter " +"mere effektivt i et komplekst system." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Forælder til denne gruppe" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Overordnet attributgruppe" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Attributgruppens navn" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Attributgruppe" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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, " +"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." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for " +"leverandørens API-kommunikation" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Oplysninger om godkendelse" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Definer markeringen for produkter, der hentes fra denne leverandør" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Sælgerens markup-procentdel" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Navn på denne leverandør" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Leverandørens navn" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "Svarfil" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "leverandørens sidste behandlingssvar" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Leverandørens sti til integrationsfilen" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Integrationsvej" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Repræsenterer et produkttag, der bruges til at klassificere eller " +"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." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Intern tag-identifikator for produkttagget" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tag-navn" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Brugervenligt navn til produktmærket" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Navn på tag-visning" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Produktmærke" + +#: engine/core/models.py:229 +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 "" +"Repræsenterer et kategoritag, der bruges til produkter. Denne klasse " +"modellerer et kategoritag, der kan bruges til at tilknytte og klassificere " +"produkter. Den indeholder attributter til en intern tag-identifikator og et " +"brugervenligt visningsnavn." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "Kategori-tag" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "Kategori-tags" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Repræsenterer en kategorienhed til at organisere og gruppere relaterede " +"elementer i en hierarkisk struktur. Kategorier kan have hierarkiske " +"relationer til andre kategorier og understøtte forældre-barn-relationer. " +"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." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Upload et billede, der repræsenterer denne kategori" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Kategori billede" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Definer en markup-procentdel for produkter i denne kategori" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Forælder til denne kategori for at danne en hierarkisk struktur" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Overordnet kategori" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Navn på kategori" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Giv et navn til denne kategori" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Tilføj en detaljeret beskrivelse af denne kategori" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Beskrivelse af kategori" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Prioritet" + +#: engine/core/models.py:438 +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." +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 " +"applikationen." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Navnet på dette mærke" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Varemærke" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Upload et logo, der repræsenterer dette brand" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Brandets lille image" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Upload et stort logo, der repræsenterer dette brand" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Brandets store image" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Tilføj en detaljeret beskrivelse af brandet" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Varemærkebeskrivelse" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Valgfrie kategorier, som dette brand er forbundet med" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"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 " +"muliggøre sporing og evaluering af produkter, der er tilgængelige fra " +"forskellige leverandører." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Den leverandør, der leverer dette produkt, lagerfører" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Tilknyttet leverandør" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Endelig pris til kunden efter tillæg" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Salgspris" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Det produkt, der er knyttet til denne lagerpost" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Tilknyttet produkt" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Den pris, der er betalt til sælgeren for dette produkt" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Leverandørens købspris" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Tilgængelig mængde af produktet på lager" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Antal på lager" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Leverandørtildelt SKU til identifikation af produktet" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Leverandørens SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Digital fil knyttet til dette lager, hvis relevant" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digital fil" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Systemets egenskaber" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Lagerposteringer" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Repræsenterer et produkt med attributter som kategori, mærke, tags, digital " +"status, navn, beskrivelse, delnummer og slug. Indeholder relaterede " +"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 " +"manipulere produktdata og tilhørende oplysninger i en applikation." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Kategori, som dette produkt tilhører" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Tilknyt eventuelt dette produkt til et brand" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Angiver, om dette produkt leveres digitalt" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Er produktet digitalt?" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Giv produktet et klart identificerende navn" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Produktets navn" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Tilføj en detaljeret beskrivelse af produktet" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Produktbeskrivelse" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Reservedelsnummer for dette produkt" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Varenummer" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Lagerbeholdning for dette produkt" + +#: engine/core/models.py:720 +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 " +"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, " +"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." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Gruppe af denne attribut" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Streng" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Heltal" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Flyder" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolsk" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objekt" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Type af attributtens værdi" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Værditype" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Navn på denne attribut" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Attributtens navn" + +#: engine/core/models.py:758 +msgid "is filterable" +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." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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 " +"mulighed for bedre organisering og dynamisk repræsentation af " +"produktegenskaber." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attribut for denne værdi" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Det specifikke produkt, der er knyttet til denne attributs værdi" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Repræsenterer et produktbillede, der er knyttet til et produkt i systemet. " +"Denne klasse er designet til at administrere billeder til produkter, " +"herunder funktionalitet til at uploade billedfiler, knytte dem til " +"specifikke produkter og bestemme deres visningsrækkefølge. Den indeholder " +"også en tilgængelighedsfunktion med alternativ tekst til billederne." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Billedets alt-tekst" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Upload billedfilen til dette produkt" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Produktbillede" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Bestemmer den rækkefølge, billederne vises i" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Skærm-prioritet" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Det produkt, som dette billede repræsenterer" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Produktbilleder" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"Repræsenterer en reklamekampagne for produkter med rabat. Denne klasse " +"bruges til at definere og administrere kampagner, der tilbyder en " +"procentbaseret rabat på produkter. Klassen indeholder attributter til at " +"indstille rabatsatsen, give detaljer om kampagnen og linke den til de " +"relevante produkter. Den integreres med produktkataloget for at bestemme de " +"berørte varer i kampagnen." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Procentvis rabat for de valgte produkter" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Rabatprocent" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Giv et unikt navn til denne kampagne" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Navn på kampagne" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Beskrivelse af kampagnen" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Inkluderede produkter" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Forfremmelse" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Repræsenterer en brugers ønskeliste til opbevaring og administration af " +"ønskede produkter. Klassen giver funktionalitet til at administrere en " +"samling af produkter og understøtter operationer som at tilføje og fjerne " +"produkter samt operationer til at tilføje og fjerne flere produkter på én " +"gang." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produkter, som brugeren har markeret som ønskede" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Bruger, der ejer denne ønskeliste" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Ønskelistens ejer" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Ønskeliste" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"Repræsenterer en dokumentarisk post, der er knyttet til et produkt. Denne " +"klasse bruges til at gemme oplysninger om dokumentarfilm relateret til " +"specifikke produkter, herunder filuploads og deres metadata. Den indeholder " +"metoder og egenskaber til at håndtere filtypen og lagringsstien for " +"dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og " +"giver yderligere brugerdefinerede funktioner." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Dokumentarfilm" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Dokumentarfilm" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"Repræsenterer en adresseenhed, der indeholder placeringsoplysninger og " +"tilknytninger til en bruger. Indeholder funktionalitet til lagring af " +"geografiske data og adressedata samt integration med geokodningstjenester. " +"Denne klasse er designet til at gemme detaljerede adresseoplysninger, " +"herunder komponenter som gade, by, region, land og geolokalisering (længde- " +"og breddegrad). Den understøtter integration med geokodnings-API'er og " +"muliggør lagring af rå API-svar til videre behandling eller inspektion. " +"Klassen gør det også muligt at knytte en adresse til en bruger, hvilket " +"letter personlig datahåndtering." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Adresselinje til kunden" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Adresselinje" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Gade" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Distrikt" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "By" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Postnummer" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Land" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Gemt JSON-svar fra geokodningstjenesten" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adresse" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresser" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +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 " +"kampagnekoden på en ordre og samtidig sikre, at begrænsningerne er opfyldt." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Unik kode, der bruges af en bruger til at indløse en rabat" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Identifikator for kampagnekode" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Fast rabatbeløb" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Procentvis rabat" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Tidsstempel, når promokoden udløber" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Slut gyldighedstid" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Tidsstempel, hvorfra denne promokode er gyldig" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Start gyldighedstid" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Tidsstempel, hvor promokoden blev brugt, blank, hvis den ikke er brugt endnu" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Tidsstempel for brug" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Bruger tildelt denne promokode, hvis relevant" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Tildelt bruger" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Kampagnekode" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Kampagnekoder" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " +"eller ingen af dem." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promokoden er allerede blevet brugt" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Ugyldig rabattype for promokode {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Repræsenterer en ordre afgivet af en bruger. Denne klasse modellerer en " +"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 " +"funktionaliteten håndtering af produkterne i ordrens livscyklus." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Den faktureringsadresse, der bruges til denne ordre" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Valgfri kampagnekode anvendt på denne ordre" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Anvendt kampagnekode" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Den leveringsadresse, der er brugt til denne ordre" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Leveringsadresse" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Ordrens aktuelle status i dens livscyklus" + +#: engine/core/models.py:1238 +msgid "order status" +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" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON-repræsentation af ordreattributter for denne ordre" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Den bruger, der har afgivet ordren" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Bruger" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Køb tid" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "En menneskeligt læsbar identifikator for ordren" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "menneskeligt læsbart ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Bestil" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "En bruger må kun have én afventende ordre ad gangen!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "Du kan ikke tilføje produkter til en ordre, der ikke er i gang." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Du kan ikke tilføje inaktive produkter til en ordre" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Du kan ikke tilføje flere produkter, end der er på lager" + +#: 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 "" +"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " +"ordre." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} findes ikke med forespørgslen <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promokode findes ikke" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "Du kan kun købe fysiske produkter med angivet leveringsadresse!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adressen findes ikke" + +#: 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 "Du kan ikke købe i øjeblikket, prøv venligst igen om et par minutter." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Ugyldig kraftværdi" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +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." + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "En bruger uden saldo kan ikke købe med saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Utilstrækkelige midler til at gennemføre ordren" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " +"kundens navn, kundens e-mail, kundens telefonnummer" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Håndterer brugerfeedback for produkter. Denne klasse er designet til at " +"indfange og gemme brugerfeedback for specifikke produkter, som de har købt. " +"Den indeholder attributter til at gemme brugerkommentarer, en reference til " +"det relaterede produkt i ordren og en brugertildelt vurdering. Klassen " +"bruger databasefelter til effektivt at modellere og administrere " +"feedbackdata." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Brugernes kommentarer om deres oplevelse med produktet" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Henviser til det specifikke produkt i en ordre, som denne feedback handler " +"om" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Relateret ordreprodukt" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Brugertildelt vurdering af produktet" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Produktvurdering" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +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 " +"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 " +"forretningslogik, f.eks. beregning af den samlede pris eller generering af " +"en download-URL for digitale produkter. Modellen integreres med Order- og " +"Product-modellerne og gemmer en reference til dem." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Den pris, som kunden har betalt for dette produkt på købstidspunktet" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Købspris på bestillingstidspunktet" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Interne kommentarer til administratorer om dette bestilte produkt" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Interne kommentarer" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Notifikationer til brugere" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON-repræsentation af dette elements attributter" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Bestilte produktattributter" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Forældreordre" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Mængde af dette specifikke produkt i ordren" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Produktmængde" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Aktuel status for dette produkt i bestillingen" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status for produktlinje" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct skal have en tilknyttet ordre!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +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." + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Navn" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL til integrationen" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Legitimationsoplysninger til godkendelse" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Du kan kun have én standard CRM-udbyder" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM'er" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Ordrens CRM-link" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Bestillingernes CRM-links" + +#: engine/core/models.py:1947 +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." +msgstr "" +"Repræsenterer downloadfunktionen for digitale aktiver, der er forbundet med " +"ordrer. DigitalAssetDownload-klassen giver mulighed for at administrere og " +"få adgang til downloads relateret til ordreprodukter. Den vedligeholder " +"oplysninger om det tilknyttede ordreprodukt, antallet af downloads, og om " +"aktivet er offentligt synligt. Den indeholder en metode til at generere en " +"URL til download af aktivet, når den tilknyttede ordre har status som " +"afsluttet." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Download" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Downloads" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"Du skal angive en kommentar, en vurdering og et produkt-uid for at tilføje " +"feedback." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Hjem" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Kontakt os" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Om os" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Mix af kunder (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nye kunder" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Tilbagevendende kunder" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Ingen kundeaktivitet i de sidste 30 dage." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Dagligt salg" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Ordrer (AFSLUTTET)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Bruttoindtægter" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Bestillinger" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Oversigt over indtægter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Nettoomsætning" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Skatter og afgifter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Returnerer" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Bruttoindtægter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Ingen dato" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Nettoomsætning" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Tilbagebetalingssats" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Returneret" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Lavt lager" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Ingen varer på lavt lager." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Mest returnerede produkter (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Ingen returneringer inden for de sidste 30 dage." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Mest ønskede produkt" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Ingen data endnu." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Mest populære produkt" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Hurtige links" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Ingen tilgængelige links." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Afsendt vs. digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Afsendt" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Topkategorier efter mængde (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Ingen kategorisalg inden for de sidste 30 dage." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site-administrator" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Ordrebekræftelse" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hej %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Tak for din ordre #%(order.pk)s! Vi er glade for at kunne informere dig om, " +"at vi har taget din ordre i brug. Nedenfor er detaljerne om din ordre:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "I alt" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Samlet pris" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Hvis du har spørgsmål, er du velkommen til at kontakte vores support på " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Med venlig hilsen,
teamet %(config.PROJECT_NAME)s." + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Alle rettigheder forbeholdes" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Order Delivered" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hej %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Vi har behandlet din ordre №%(order_uuid)s! Nedenfor er detaljerne om din " +"ordre:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"yderligere\n" +" oplysninger" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Værdi" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Hvis du har spørgsmål, er du velkommen til at kontakte vores support på " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Med venlig hilsen,
teamet %(project_name)s." + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Nøgle" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Tilføj række" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promokode tildelt" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Tak, fordi du bor hos os! Vi har givet dig en promokode\n" +" til" + +#: 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" +" the details of your order:" +msgstr "" +"Tak for din bestilling! Vi er glade for at kunne bekræfte dit køb. Nedenfor " +"er detaljerne om din ordre:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Forsendelsespris" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Din ordre vil blive leveret til følgende adresse:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "De bedste hilsner,
The %(config.PROJECT_NAME)s team" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"alle rettigheder\n" +" forbeholdt" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Både data og timeout er påkrævet" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | kontakt os indledt" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | ordrebekræftelse" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order delivered" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Du har ikke tilladelse til at udføre denne handling." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Parameteren NOMINATIM_URL skal være konfigureret!" + +#: engine/core/validators.py:19 +#, 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." + +#: engine/core/views.py:91 +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 anmodningen om sitemap-indekset og returnerer et XML-svar. Den " +"sikrer, at svaret indeholder den passende indholdstypeheader for XML." + +#: engine/core/views.py:106 +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 "" +"Håndterer det detaljerede visningssvar for et sitemap. Denne funktion " +"behandler anmodningen, henter det relevante sitemap-detaljesvar og " +"indstiller Content-Type-headeren til XML." + +#: engine/core/views.py:141 +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:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Returnerer hjemmesidens parametre som et JSON-objekt." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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:219 +msgid "Handles `contact us` form submissions." +msgstr "Håndterer indsendelser af `kontakt os`-formularer." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Håndterer anmodninger om behandling og validering af URL'er fra indgående " +"POST-anmodninger." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Håndterer globale søgeforespørgsler." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid er påkrævet" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "Bestil produkt findes ikke" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Du kan kun downloade det digitale aktiv én gang" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Ordreproduktet har ikke et produkt" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "Favicon ikke fundet" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Omdirigerer anmodningen til administratorens indeksside. Funktionen " +"håndterer indgående HTTP-anmodninger og omdirigerer dem til Django-" +"administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion " +"til at håndtere HTTP-omdirigeringen." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Returnerer den aktuelle version af eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Indtægter og ordrer (sidste %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definerer et visningssæt til håndtering af Evibes-relaterede operationer. " +"EvibesViewSet-klassen arver fra ModelViewSet og giver funktionalitet til " +"håndtering af handlinger og operationer på Evibes-enheder. Den omfatter " +"understøttelse af dynamiske serializer-klasser baseret på den aktuelle " +"handling, tilladelser, der kan tilpasses, og gengivelsesformater." + +#: 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." +msgstr "" +"Repræsenterer et visningssæt til håndtering af AttributeGroup-objekter. " +"Håndterer operationer relateret til AttributeGroup, herunder filtrering, " +"serialisering og hentning af data. Denne klasse er en del af applikationens " +"API-lag og giver en standardiseret måde at behandle anmodninger og svar for " +"AttributeGroup-data på." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Håndterer operationer relateret til attributobjekter i applikationen. " +"Tilbyder et sæt API-slutpunkter til at interagere med attributdata. Denne " +"klasse håndterer forespørgsler, filtrering og serialisering af Attribute-" +"objekter, hvilket giver mulighed for dynamisk kontrol over de returnerede " +"data, f.eks. filtrering efter specifikke felter eller hentning af " +"detaljerede eller forenklede oplysninger afhængigt af anmodningen." + +#: 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." +msgstr "" +"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:213 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Administrerer visninger til kategorirelaterede operationer. Klassen " +"CategoryViewSet er ansvarlig for at håndtere operationer, der er relateret " +"til kategorimodellen i systemet. Den understøtter hentning, filtrering og " +"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: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-" +"objekter. Den bruger Djangos ViewSet-rammeværk til at forenkle " +"implementeringen af API-slutpunkter for Brand-objekter." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +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 " +"relateret feedback om et produkt." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +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 " +"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: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 " +"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 " +"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 " +"forespørge på data." + +#: 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 " +"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 " +"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: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 " +"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 " +"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:879 +msgid "Manages operations related to Product images in the application. " +msgstr "Håndterer operationer relateret til produktbilleder i applikationen." + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Administrerer hentning og håndtering af PromoCode-instanser gennem " +"forskellige API-handlinger." + +#: 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:927 +msgid "Handles operations related to Stock data in the system." +msgstr "Håndterer operationer relateret til lagerdata i systemet." + +#: 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 " +"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 til håndtering af ønskelisteoperationer. WishlistViewSet giver " +"slutpunkter til at interagere med en brugers ønskeliste, hvilket giver " +"mulighed for at hente, ændre og tilpasse produkter på ønskelisten. Dette " +"ViewSet faciliterer funktionalitet som tilføjelse, fjernelse og " +"massehandlinger for ønskelisteprodukter. Kontrol af tilladelser er " +"integreret for at sikre, at brugere kun kan administrere deres egne " +"ønskelister, medmindre der er givet eksplicitte tilladelser." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Fejl i geokodning: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Håndterer operationer relateret til Product Tags i applikationen. Denne " +"klasse giver funktionalitet til at hente, filtrere og serialisere Product " +"Tag-objekter. Den understøtter fleksibel filtrering på specifikke " +"attributter ved hjælp af den angivne filterbackend og bruger dynamisk " +"forskellige serializers baseret på den handling, der udføres." diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.mo b/engine/core/locale/de_DE/LC_MESSAGES/django.mo new file mode 100644 index 00000000..0541965b Binary files /dev/null and b/engine/core/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.po b/engine/core/locale/de_DE/LC_MESSAGES/django.po new file mode 100644 index 00000000..c342b56f --- /dev/null +++ b/engine/core/locale/de_DE/LC_MESSAGES/django.po @@ -0,0 +1,3578 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: de-de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Eindeutige ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"Eindeutige ID wird zur sicheren Identifizierung jedes Datenbankobjekts " +"verwendet" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Ist aktiv" + +#: engine/core/abstract.py:21 +msgid "" +"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." + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Erstellt" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Wann das Objekt zum ersten Mal in der Datenbank erschienen ist" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Geändert" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Wann das Objekt zuletzt bearbeitet wurde" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Übersetzungen" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Allgemein" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Beziehungen" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "Zusatzinfo" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadaten" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Zeitstempel" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Ausgewählte Artikel wurden aktiviert!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Ausgewählte Artikel wurden deaktiviert!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Attribut Werte" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Bild" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Bilder" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Lagerbestand" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Bestände" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Produkt bestellen" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Kinder" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfigurieren Sie" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Kern" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Fertige" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Bereitstellung von" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Geliefert" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Abgesagt" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Gescheitert" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Anhängig" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Angenommen" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Zurückgegebenes Geld" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Zahlung" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momente" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Erfolgreich" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "OpenAPI-Schema im ausgewählten Format mit ausgewählter Sprache" + +#: engine/core/docs/drf/views.py:33 +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 "" +"OpenApi3-Schema für diese API. Das Format kann über Content Negotiation " +"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:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Eine Liste der unterstützten Sprachen abrufen" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Abrufen der exponierbaren Parameter der Anwendung" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Fordern Sie eine CORS-gesicherte URL an. Nur https erlaubt." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Suche zwischen Produkten, Kategorien und Marken" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Globaler Suchendpunkt zur Abfrage aller Tabellen des Projekts" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Eine Bestellung als Unternehmen kaufen" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Kauf einer Bestellung als Unternehmen unter Verwendung der angegebenen " +"\"Produkte\" mit \"product_uuid\" und \"Attributen\"." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "" +"ein digitales Asset aus einer erworbenen digitalen Bestellung herunterladen" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Alle Attributgruppen auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Abrufen einer einzelnen Attributgruppe (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Erstellen einer Attributgruppe" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Löschen einer Attributgruppe" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Umschreiben einer bestehenden Attributgruppe mit Speicherung von Nicht-" +"Editierbarkeit" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Alle Attribute auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Ein Attribut erstellen" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Ein Attribut löschen" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten " +"gespeichert werden" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Alle Attributwerte auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Abrufen eines einzelnen Attributwertes (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Einen Attributwert erstellen" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Löschen eines Attributwertes" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Umschreiben eines vorhandenen Attributwerts mit Speicherung von Nicht-" +"Editierbarkeit" + +#: engine/core/docs/drf/viewsets.py:186 +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" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Alle Kategorien auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Kategorie UUID oder Slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Eine Kategorie erstellen" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Eine Kategorie löschen" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO-Meta-Schnappschuss" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Gibt einen Schnappschuss der SEO-Metadaten der Kategorie zurück" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Alle Kategorien auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Bei Nicht-Mitarbeitern werden nur die eigenen Bestellungen zurückgeschickt." + +#: 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" +msgstr "" +"Groß- und Kleinschreibung unempfindliche Teilstringsuche über " +"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" +msgstr "Aufträge mit Kaufzeitpunkt >= dieser ISO 8601-Datumszeit filtern" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Aufträge mit Kaufzeitpunkt <= dieser ISO 8601-Datumszeit filtern" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filter nach exakter UUID der Bestellung" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtern nach exakter, von Menschen lesbarer Bestell-ID" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filter nach der E-Mail des Benutzers (Groß-/Kleinschreibung nicht " +"berücksichtigend, exakte Übereinstimmung)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filter nach der UUID des Benutzers" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filter nach Bestellstatus (Groß-/Kleinschreibung nicht berücksichtigende " +"Teilstring-Übereinstimmung)" + +#: 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')." +msgstr "" +"Sortierung nach einem von: uuid, human_readable_id, user_email, user, " +"status, created, modified, buy_time, random. Präfix mit '-' für absteigend " +"(z. B. '-buy_time')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Auftrag UUID oder menschenlesbare ID" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Ein Attribut erstellen" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Ein Attribut löschen" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Schließt den Kauf der Bestellung ab. Bei Verwendung von \"force_balance\" " +"wird der Kauf mit dem Guthaben des Benutzers abgeschlossen; bei Verwendung " +"von \"force_payment\" wird eine Transaktion ausgelöst." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "Abruf der aktuellen offenen Bestellung eines Benutzers" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "" +"ruft eine aktuelle ausstehende Bestellung eines authentifizierten Benutzers " +"ab" + +#: 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." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Ein Produkt zur Bestellung hinzufügen" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Fügt ein Produkt unter Verwendung der angegebenen `product_uuid` und " +"`attributes` zu einer Bestellung hinzu." + +#: 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" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Fügt einer Bestellung eine Liste von Produkten unter Verwendung der " +"angegebenen `product_uuid` und `attributes` hinzu." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Ein Produkt aus der Bestellung entfernen" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Entfernt ein Produkt aus einer Bestellung unter Verwendung der angegebenen " +"`product_uuid` und `attributes`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" +"Ein Produkt aus der Bestellung entfernen, die Mengen werden nicht gezählt" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Entfernt eine Liste von Produkten aus einer Bestellung unter Verwendung der " +"angegebenen `product_uuid` und `attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Alle Attribute auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Bei Nicht-Mitarbeitern werden nur ihre eigenen Wunschlisten zurückgegeben." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Ein Attribut erstellen" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Ein Attribut löschen" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten " +"gespeichert werden" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +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" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Ein Produkt zur Bestellung hinzufügen" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Fügt ein Produkt mit der angegebenen `product_uuid` zu einer Wunschliste " +"hinzu" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Ein Produkt von der Wunschliste entfernen" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Entfernt ein Produkt aus einer Wunschliste unter Verwendung der angegebenen " +"`product_uuid`." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Viele Produkte auf den Wunschzettel setzen" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Fügt einer Wunschliste viele Produkte unter Verwendung der angegebenen " +"`product_uuids` hinzu" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Ein Produkt aus der Bestellung entfernen" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Entfernt viele Produkte aus einer Wunschliste unter Verwendung der " +"angegebenen `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" +"• **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" +"`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" +"Beispiele: \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 +msgid "list all products (simple view)" +msgstr "Alle Produkte auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" +"**Erlaubt:** 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)" +msgstr "Ein einzelnes Produkt abrufen (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: 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 "" +"Einige Felder eines bestehenden Produkts aktualisieren, nicht editierbare " +"Felder beibehalten" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Ein Produkt löschen" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "listet alle zulässigen Rückmeldungen für ein Produkt auf" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Gibt einen Schnappschuss der SEO-Metadaten des Produkts zurück" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Alle Adressen auflisten" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Eine einzelne Adresse abrufen" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Eine neue Adresse erstellen" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Eine Adresse löschen" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Eine ganze Adresse aktualisieren" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Teilweise Aktualisierung einer Adresse" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +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" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "begrenzt die Anzahl der Ergebnisse, 1 < Limit < 10, Standard: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "alle Rückmeldungen auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "eine einzelne Rückmeldung abrufen (detaillierte Ansicht)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "ein Feedback erstellen" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "eine Rückmeldung löschen" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "alle Bestell-Produkt-Beziehungen auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "eine einzelne Auftrag-Produkt-Relation abrufen (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "eine neue Auftrag-Produkt-Beziehung erstellen" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "eine bestehende Auftrag-Produkt-Relation ersetzen" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "eine bestehende Auftrag-Produkt-Beziehung teilweise aktualisieren" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "eine Auftrag-Produkt-Beziehung löschen" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "" +"Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Alle Marken auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Abrufen einer einzelnen Marke (detaillierte Ansicht)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Marke UUID oder Slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Eine Marke schaffen" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Eine Marke löschen" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Alle Lieferanten auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Abruf eines einzelnen Lieferanten (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Einen Verkäufer erstellen" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Einen Lieferanten löschen" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Alle Produktbilder auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Abrufen eines einzelnen Produktbildes (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Ein Produktbild erstellen" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Ein Produktbild löschen" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Alle Promo-Codes auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Einen einzelnen Promo-Code abrufen (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Einen Promo-Code erstellen" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Einen Promo-Code löschen" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Alle Aktionen auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Abrufen einer einzelnen Aktion (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Eine Werbeaktion erstellen" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Eine Aktion löschen" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Alle Bestände auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Abruf einer einzelnen Aktie (Detailansicht)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Einen Bestandssatz erstellen" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Löschen eines Bestandsdatensatzes" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Alle Produkt-Tags auflisten (einfache Ansicht)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Ein einzelnes Produkt-Tag abrufen (detaillierte Ansicht)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Ein Produkt-Tag erstellen" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Ein Produkt-Tag löschen" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" +"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" + +#: 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" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Kein Suchbegriff angegeben." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Suche" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Name" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Kategorien" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Kategorien Schnecken" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tags" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Mindestpreis" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Maximaler Preis" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Ist aktiv" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Marke" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Attribute" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Menge" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Schnecke" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Is Digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Unterkategorien einbeziehen" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Persönlich bestellte Produkte einbeziehen" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +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" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Suche (ID, Produktname oder Teilenummer)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Gekauft nach (einschließlich)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Gekauft vor (einschließlich)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Benutzer-E-Mail" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "User UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Human Readable ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Elternteil" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Ebene" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Produkt UUID" + +#: 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:41 +msgid "data to store in cache" +msgstr "Im Cache zu speichernde Daten" + +#: 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:47 +msgid "cached data" +msgstr "Zwischengespeicherte Daten" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Ein Produkt zur Bestellung hinzufügen" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Alle Produkte aus der Bestellung entfernen" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Eine Bestellung kaufen" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Entfernen/Hinzufügen" + +#: 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: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" + +#: 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: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:382 +msgid "add a product to the wishlist" +msgstr "Ein Produkt zur Bestellung hinzufügen" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Ein Produkt aus der Bestellung entfernen" + +#: 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:510 +msgid "buy a product" +msgstr "Eine Bestellung kaufen" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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: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:573 +msgid "action must be either `add` or `remove`" +msgstr "Aktion muss entweder `Add` oder `remove` sein!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Vom Benutzer angegebene Originaladresse" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} existiert nicht: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - funktioniert wie ein Zauber" + +#: 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:95 +msgid "grouped attributes" +msgstr "Gruppierte Attribute" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Gruppen von Attributen" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Marken" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Kategorien" + +#: 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: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: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." + +#: engine/core/graphene/object_types.py:205 +msgid "tags for this category" +msgstr "Tags für diese Kategorie" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produkte in dieser Kategorie" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Anbieter" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Breitengrad (Y-Koordinate)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Längengrad (X-Koordinate)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Wie" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Stellt das Feedback eines Benutzers dar." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Rückmeldung" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Rechnungsadresse" + +#: 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 "" +"Lieferadresse für diese Bestellung, leer lassen, wenn sie mit der " +"Rechnungsadresse übereinstimmt oder nicht zutrifft" + +#: 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:415 +msgid "total quantity of products in order" +msgstr "Gesamtmenge der bestellten Produkte" + +#: 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:419 +msgid "transactions for this order" +msgstr "Vorgänge für diesen Auftrag" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Bestellungen" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Bild URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Bilder des Produkts" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Rückmeldungen" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Attribut-Gruppen" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Preis" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Menge" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Anzahl der Rückmeldungen" + +#: 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:484 +msgid "discount price" +msgstr "Rabattierter Preis" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produkte" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promocodes" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Zum Verkauf stehende Produkte" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Werbeaktionen" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Anbieter" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produkt" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Wunschzettel" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Markierte Produkte" + +#: 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:665 +msgid "tagged categories" +msgstr "Markierte Kategorien" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Kategorien'-Tags" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Name des Projekts" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Name des Unternehmens" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Adresse des Unternehmens" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Telefonnummer des Unternehmens" + +#: 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:681 +msgid "email host user" +msgstr "E-Mail-Host-Benutzer" + +#: 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:683 +msgid "minimum amount for payment" +msgstr "Mindestbetrag für die Zahlung" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analytische Daten" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Advertisement data" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Konfiguration" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Sprachcode" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Name der Sprache" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Sprachflagge, falls vorhanden :)" + +#: 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 +msgid "products search results" +msgstr "Suchergebnisse für Produkte" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Suchergebnisse für Produkte" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"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." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Elternteil dieser Gruppe" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Übergeordnete Attributgruppe" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Name der Attributgruppe" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Attribut-Gruppe" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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 " +"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." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation " +"des Anbieters erforderlich sind" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Informationen zur Authentifizierung" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" +"Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten " +"bezogen werden" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Prozentualer Aufschlag des Lieferanten" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Name dieses Anbieters" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Name des Anbieters" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "Antwortdatei" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "die letzte Verarbeitungsantwort des Lieferanten" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Pfad der Integrationsdatei des Anbieters" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Integrationspfad" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +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. " +"Sie unterstützt Operationen, die über Mixins exportiert werden, und " +"ermöglicht die Anpassung von Metadaten für Verwaltungszwecke." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Interner Tag-Identifikator für das Produkt-Tag" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tag name" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Benutzerfreundlicher Name für den Produktanhänger" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Tag-Anzeigename" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Produkt-Tag" + +#: engine/core/models.py:229 +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 "" +"Stellt ein für Produkte verwendetes Kategorie-Tag dar. Diese Klasse " +"modelliert ein Kategorie-Tag, das verwendet werden kann, um Produkte " +"zuzuordnen und zu klassifizieren. Sie enthält Attribute für einen internen " +"Tag-Bezeichner und einen benutzerfreundlichen Anzeigenamen." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "Kategorie-Tag" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "Kategorie-Tags" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Stellt eine Kategorie-Entität zur Organisation und Gruppierung verwandter " +"Elemente in einer hierarchischen Struktur dar. Kategorien können " +"hierarchische Beziehungen zu anderen Kategorien haben, die Eltern-Kind-" +"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 " +"wie Bilder, Tags oder Priorität zuzuweisen." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Kategorie Bild" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" +"Definieren Sie einen prozentualen Aufschlag für Produkte in dieser Kategorie" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "" +"Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Übergeordnete Kategorie" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Name der Kategorie" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Geben Sie einen Namen für diese Kategorie an" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Beschreibung der Kategorie" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Priorität" + +#: engine/core/models.py:438 +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." +msgstr "" +"Stellt ein Markenobjekt im System dar. Diese Klasse verwaltet Informationen " +"und Attribute in Bezug auf eine Marke, einschließlich ihres Namens, Logos, " +"ihrer Beschreibung, der zugehörigen Kategorien, eines eindeutigen Slugs und " +"der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung " +"von markenbezogenen Daten innerhalb der Anwendung." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Name dieser Marke" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Markenname" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Marke kleines Bild" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Großes Image der Marke" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Beschreibung der Marke" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "" +"Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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, " +"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." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Zugehöriger Anbieter" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Endpreis für den Kunden nach Aufschlägen" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Verkaufspreis" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Das mit diesem Bestandseintrag verbundene Produkt" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Zugehöriges Produkt" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Der an den Verkäufer gezahlte Preis für dieses Produkt" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Einkaufspreis des Verkäufers" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Verfügbare Menge des Produkts auf Lager" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Vorrätige Menge" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" + +#: engine/core/models.py:550 +msgid "vendor sku" +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" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digitale Datei" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "System-Attribute" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Bestandseinträge" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +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 " +"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 " +"Anwendung zu definieren und zu manipulieren." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Kategorie, zu der dieses Produkt gehört" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Gibt an, ob dieses Produkt digital geliefert wird" + +#: engine/core/models.py:606 +msgid "is product digital" +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." + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Name des Produkts" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Beschreibung des Produkts" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Teilenummer für dieses Produkt" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Teilnummer" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Lagerhaltende Einheit für dieses Produkt" + +#: engine/core/models.py:720 +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 " +"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 " +"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, " +"Array und Object. Dies ermöglicht eine dynamische und flexible " +"Datenstrukturierung." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Gruppe dieses Attributs" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Zeichenfolge" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Integer" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Schwimmer" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolesche" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objekt" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Typ des Attributwerts" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Werttyp" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Name dieses Attributs" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Name des Attributs" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "ist filterbar" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Welche Attribute und Werte können für die Filterung dieser Kategorie " +"verwendet werden." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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\" " +"und ermöglicht so eine bessere Organisation und dynamische Darstellung der " +"Produktmerkmale." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attribut dieses Wertes" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "" +"Das spezifische Produkt, das mit dem Wert dieses Attributs verbunden ist" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "" +"Geben Sie einen alternativen Text für das Bild an, um die Barrierefreiheit " +"zu gewährleisten." + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Bild-Alt-Text" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Produktbild" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Priorität anzeigen" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Das Produkt, das dieses Bild darstellt" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Produktbilder" + +#: engine/core/models.py:868 +msgid "" +"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." +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 " +"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." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Prozentualer Rabatt für die ausgewählten Produkte" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Prozentsatz der Ermäßigung" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Name der Aktion" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Promotion description" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Enthaltene Produkte" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Förderung" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"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." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produkte, die der Benutzer als gewünscht markiert hat" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Benutzer, dem diese Wunschliste gehört" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Besitzer der Wishlist" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Wunschzettel" + +#: engine/core/models.py:985 +msgid "" +"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." +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 " +"benutzerdefinierte Funktionen." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Dokumentarfilm" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Dokumentarfilme" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"Stellt eine Adresseinheit dar, die Standortdetails und Assoziationen mit " +"einem Benutzer enthält. Bietet Funktionen für die Speicherung von " +"geografischen und Adressdaten sowie für die Integration mit " +"Geokodierungsdiensten. Diese Klasse ist für die Speicherung detaillierter " +"Adressinformationen mit Komponenten wie Straße, Stadt, Region, Land und " +"Geolocation (Längen- und Breitengrad) konzipiert. Sie unterstützt die " +"Integration mit Geokodierungs-APIs und ermöglicht die Speicherung von rohen " +"API-Antworten zur weiteren Verarbeitung oder Überprüfung. Die Klasse " +"ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die " +"personalisierte Datenverarbeitung erleichtert." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Adresszeile für den Kunden" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Adresszeile" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Straße" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Bezirk" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Stadt" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Postleitzahl" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Land" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolocation Point(Längengrad, Breitengrad)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adresse" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adressen" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Stellt einen Aktionscode dar, der für Rabatte verwendet werden kann, und " +"verwaltet seine Gültigkeit, die Art des Rabatts und die Anwendung. Die " +"Klasse PromoCode speichert Details zu einem Aktionscode, einschließlich " +"seines eindeutigen Bezeichners, der Rabatteigenschaften (Betrag oder " +"Prozentsatz), der Gültigkeitsdauer, des zugehörigen Benutzers (falls " +"vorhanden) und des Status seiner Verwendung. Sie enthält Funktionen zur " +"Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei " +"sichergestellt wird, dass die Einschränkungen eingehalten werden." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "" +"Einzigartiger Code, den ein Nutzer zum Einlösen eines Rabatts verwendet" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +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" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Fester Rabattbetrag" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Prozentualer Rabatt" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Zeitstempel, wann der Promocode abläuft" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Ende der Gültigkeitsdauer" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Beginn der Gültigkeitsdauer" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Zeitstempel, wann der Promocode verwendet wurde, leer, wenn noch nicht " +"verwendet" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Zeitstempel der Verwendung" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Zugewiesener Benutzer" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Promo-Code" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Promo-Codes" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " +"Prozentsatz), aber nicht beides oder keines von beiden." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promocode wurde bereits verwendet" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Stellt eine von einem Benutzer aufgegebene Bestellung dar. Diese Klasse " +"modelliert eine Bestellung innerhalb der Anwendung, einschließlich ihrer " +"verschiedenen Attribute wie Rechnungs- und Versandinformationen, Status, " +"zugehöriger Benutzer, Benachrichtigungen und zugehörige Vorgänge. " +"Bestellungen können mit Produkten verknüpft werden, es können Werbeaktionen " +"durchgeführt, Adressen festgelegt und Versand- oder Rechnungsdaten " +"aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung " +"der Produkte im Lebenszyklus der Bestellung." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Die für diese Bestellung verwendete Rechnungsadresse" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Optionaler Promo-Code für diese Bestellung" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Angewandter Promo-Code" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Die für diese Bestellung verwendete Lieferadresse" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Lieferadresse" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Status der Bestellung" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON-Struktur der Benachrichtigungen, die den Benutzern angezeigt werden " +"sollen; in der Admin-UI wird die Tabellenansicht verwendet" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Der Benutzer, der die Bestellung aufgegeben hat" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Benutzer" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Zeit kaufen" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "menschenlesbare ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Bestellung" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Ein Benutzer darf immer nur einen schwebenden Auftrag haben!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"Sie können keine Produkte zu einem Auftrag hinzufügen, der nicht in " +"Bearbeitung ist." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Sie können nicht mehr Produkte hinzufügen, als auf Lager sind" + +#: 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 "" +"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " +"Bearbeitung ist." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} existiert nicht mit Abfrage <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promocode existiert nicht" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Sie können nur physische Produkte mit angegebener Lieferadresse kaufen!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adresse ist nicht vorhanden" + +#: 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 "" +"Sie können im Moment nicht kaufen, bitte versuchen Sie es in ein paar " +"Minuten erneut." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Ungültiger Force-Wert" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Sie können keine leere Bestellung kaufen!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" +"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " +"Bearbeitung ist." + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Unzureichende Mittel für die Ausführung des Auftrags" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " +"Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Ungültige Zahlungsmethode: {payment_method} von {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"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 " +"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." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese" +" Rückmeldung bezieht" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Produkt zur Bestellung" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Produktbewertung" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +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, " +"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 " +"Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " +"integriert und speichert einen Verweis auf diese." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" +"Der Preis, den der Kunde zum Zeitpunkt des Kaufs für dieses Produkt bezahlt " +"hat" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Interne Kommentare" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Benutzerbenachrichtigungen" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON-Darstellung der Attribute dieses Artikels" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Bestellte Produktattribute" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Übergeordneter Auftrag" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Menge dieses spezifischen Produkts in der Bestellung" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Produktmenge" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Aktueller Status dieses Produkts im Auftrag" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status der Produktlinie" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Falsche Aktion für Feedback angegeben: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" +"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " +"Bearbeitung ist." + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Name" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL der Integration" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Anmeldeinformationen zur Authentifizierung" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Sie können nur einen Standard-CRM-Anbieter haben" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRMs" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "CRM-Link der Bestellung" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "CRM-Links der Bestellungen" + +#: engine/core/models.py:1947 +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." +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 " +"zugehörige Bestellung in einem abgeschlossenen Status befindet." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Herunterladen" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Herunterladen" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"Sie müssen einen Kommentar, eine Bewertung und eine Produktnummer angeben, " +"um eine Bewertung abzugeben." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Startseite" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Kontakt" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Über uns" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Kundenmix (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Neue Kunden" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Wiederkehrende Kunden" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Keine Kundenaktivität in den letzten 30 Tagen." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Tägliche Verkäufe" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Aufträge (FINISHED)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Bruttoeinnahmen" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Bestellungen" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Einkommensübersicht" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Nettoeinkommen" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Steuern" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Rückgabe" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Bruttoeinnahmen" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Kein Datum" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Nettoeinkommen" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Erstattungssatz" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Zurückgeschickt" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Niedriger Bestand" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Keine Artikel mit geringem Lagerbestand." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Meist zurückgesandte Produkte (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Keine Rückgaben in den letzten 30 Tagen." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Meistgewünschtes Produkt" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Noch keine Daten." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Beliebtestes Produkt" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Schnelle Links" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Keine Links verfügbar." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Versendet vs. Digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Versendet" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Top-Kategorien nach Menge (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Keine Kategorieverkäufe in den letzten 30 Tagen." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django-Website-Administrator" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Bestätigung der Bestellung" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hallo %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Vielen Dank für Ihre Bestellung #%(order.pk)s! Wir freuen uns, Ihnen " +"mitteilen zu können, dass wir Ihre Bestellung in Arbeit genommen haben. " +"Nachfolgend finden Sie die Details Ihrer Bestellung:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Insgesamt" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Gesamtpreis" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Wenn Sie Fragen haben, wenden Sie sich bitte an unseren Support unter " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Mit freundlichen Grüßen,
das %(config.PROJECT_NAME)s-Team" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Alle Rechte vorbehalten" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Bestellung Geliefert" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hallo %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Wir haben Ihre Bestellung erfolgreich bearbeitet №%(order_uuid)s! " +"Nachstehend finden Sie die Details Ihrer Bestellung:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"zusätzliche\n" +" Informationen" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Wert" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Wenn Sie Fragen haben, wenden Sie sich bitte an unseren Support unter " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Schlüssel" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Zeile hinzufügen" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promocode granted" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Danke, dass Sie bei uns bleiben! Wir haben Ihnen einen Promocode gewährt\n" +" für" + +#: 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" +" the details of your order:" +msgstr "" +"Vielen Dank für Ihre Bestellung! Wir freuen uns, Ihren Kauf zu bestätigen. " +"Nachstehend finden Sie die Details Ihrer Bestellung:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Versandpreis" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Ihre Bestellung wird an die folgende Adresse geliefert:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Mit freundlichen Grüßen,
Das %(config.PROJECT_NAME)s-Team" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"alle Rechte\n" +" vorbehalten" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +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" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | Kontakt eingeleitet" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | Auftragsbestätigung" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | Bestellung geliefert" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Sie haben nicht die Erlaubnis, diese Aktion durchzuführen." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Der Parameter NOMINATIM_URL muss konfiguriert werden!" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" +"Die Bildabmessungen sollten w{max_width} x h{max_height} Pixel nicht " +"überschreiten" + +#: engine/core/views.py:91 +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 "" +"Bearbeitet die Anfrage für den Sitemap-Index und gibt eine XML-Antwort " +"zurück. Sie stellt sicher, dass die Antwort den entsprechenden Content-Type-" +"Header für XML enthält." + +#: engine/core/views.py:106 +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 "" +"Verarbeitet die Antwort auf die Detailansicht für eine Sitemap. Diese " +"Funktion verarbeitet die Anfrage, holt die entsprechende Sitemap-" +"Detailantwort ab und setzt den Content-Type-Header für XML." + +#: engine/core/views.py:141 +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:173 +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:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Erledigt Cache-Operationen wie das Lesen und Setzen von Cache-Daten mit " +"einem bestimmten Schlüssel und Timeout." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Verarbeitet Übermittlungen des Formulars \"Kontaktieren Sie uns\"." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Bearbeitet Anfragen zur Verarbeitung und Validierung von URLs aus " +"eingehenden POST-Anfragen." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Bearbeitet globale Suchanfragen." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid ist erforderlich" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "Produkt bestellen existiert nicht" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Sie können das digitale Asset nur einmal herunterladen" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Das Bestellprodukt hat kein Produkt" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "Favicon nicht gefunden" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Leitet die Anfrage auf die Admin-Indexseite um. Die Funktion verarbeitet " +"eingehende HTTP-Anfragen und leitet sie auf die Indexseite der Django-" +"Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von " +"Django für die Bearbeitung der HTTP-Umleitung." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Gibt die aktuelle Version von eVibes zurück." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Einnahmen und Aufträge (zuletzt %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +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 " +"enthält Unterstützung für dynamische Serialisiererklassen auf der Grundlage " +"der aktuellen Aktion, anpassbare Berechtigungen und Rendering-Formate." + +#: 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." +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 " +"Verarbeitung von Anfragen und Antworten für AttributeGroup-Daten." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Erledigt Vorgänge im Zusammenhang mit Attributobjekten innerhalb der " +"Anwendung. Bietet eine Reihe von API-Endpunkten zur Interaktion mit " +"Attributdaten. Diese Klasse verwaltet die Abfrage, Filterung und " +"Serialisierung von Attributobjekten und ermöglicht die dynamische Kontrolle " +"über die zurückgegebenen Daten, z. B. die Filterung nach bestimmten Feldern " +"oder das Abrufen detaillierter bzw. vereinfachter Informationen je nach " +"Anfrage." + +#: 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." +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 " +"DjangoFilterBackend bereitgestellt." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"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, " +"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: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 "" +"Stellt ein Viewset zur Verwaltung von Brand-Instanzen dar. Diese Klasse " +"bietet Funktionen zur Abfrage, Filterung und Serialisierung von Brand-" +"Objekten. Sie verwendet das ViewSet-Framework von Django, um die " +"Implementierung von API-Endpunkten für Brand-Objekte zu vereinfachen." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +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 " +"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:574 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Stellt ein Viewset für die Verwaltung von Vendor-Objekten dar. Dieses " +"Viewset ermöglicht das Abrufen, Filtern und Serialisieren von Vendor-Daten. " +"Sie definiert das Queryset, die Filterkonfigurationen und die Serializer-" +"Klassen, die für die verschiedenen Aktionen verwendet werden. Der Zweck " +"dieser Klasse ist die Bereitstellung eines optimierten Zugriffs auf Vendor-" +"Ressourcen über das Django REST-Framework." + +#: 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 " +"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 " +"implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das " +"Filtersystem von Django zur Abfrage von Daten." + +#: 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 " +"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 " +"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: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 " +"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" + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " +"verschiedene API-Aktionen." + +#: 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: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: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 " +"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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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 " +"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:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Geocodierungsfehler: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +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 " +"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 new file mode 100644 index 00000000..6ebc7a35 Binary files /dev/null and b/engine/core/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.po b/engine/core/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 00000000..d2ec929c --- /dev/null +++ b/engine/core/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,3420 @@ +# eVibes Translations. +# 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-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: en-GB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Unique ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "Unique ID is used to surely identify any database object" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Is Active" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Created" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "When the object first appeared on the database" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modified" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "When the object was last edited" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Translations" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "General" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relations" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "additional info" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Timestamps" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Selected items have been activated!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Selected items have been deactivated!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Attribute Values" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Image" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Images" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stock" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Stocks" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Order Product" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Children" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Config" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Core" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Finished" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Delivering" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Delivered" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Canceled" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Failed" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Pending" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Accepted" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Money Returned" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Payment" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Successful" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "OpenAPI schema in selected format with selected language" + +#: engine/core/docs/drf/views.py:33 +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 "" +"OpenApi3 schema for this API. Format can be selected via content " +"negotiation. Language can be selected with Accept-Language and query " +"parameter both." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"Apply only a key to read permitted data from cache.\n" +"Apply key, data and timeout with authentication to write data to cache." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Get a list of supported languages" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Get application's exposable parameters" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Request a CORSed URL. Only https allowed." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Search between products, categories and brands" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Global search endpoint to query across project's tables" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Purchase an order as a Business" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "download a digital asset from purchased digital order" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "List all attribute groups (simple view)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Retrieve a single attribute group (detailed view)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Create an attribute group" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Delete an attribute group" + +#: engine/core/docs/drf/viewsets.py:89 +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" +msgstr "" +"Rewrite some fields of an existing attribute group saving non-editables" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "List all attributes (simple view)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Retrieve a single attribute (detailed view)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Create an attribute" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Delete an attribute" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Rewrite an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "Rewrite some fields of an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "List all attribute values (simple view)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Retrieve a single attribute value (detailed view)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Create an attribute value" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Delete an attribute value" + +#: engine/core/docs/drf/viewsets.py:179 +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" +msgstr "" +"Rewrite some fields of an existing attribute value saving non-editables" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "List all categories (simple view)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Retrieve a single category (detailed view)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Category UUID or slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Create a category" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Delete a category" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Rewrite an existing category saving non-editables" + +#: 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 "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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returns a snapshot of the category's SEO meta data" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "List all categories (simple view)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"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" +msgstr "Filter orders with buy_time >= this ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filter orders with buy_time <= this ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filter by exact order UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filter by exact human-readable order ID" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "Filter by user's email (case-insensitive exact match)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filter by user's UUID" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +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')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Retrieve a single category (detailed view)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Order UUID or human-readable id" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Create an attribute" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Doesn't work for non-staff users." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Delete an attribute" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Rewrite an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "Rewrite some fields of an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Purchase price at order time" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"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." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "retrieve current pending order of a user" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "purchase an order without account creation" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finalizes the order purchase for a non-registered user." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Add a product to the order" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adds a product to an order using the provided `product_uuid` and " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Add a list of products to order, quantities will not count" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Remove a product from the order" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Removes a product from an order using the provided `product_uuid` and " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Remove a product from order, quantities will not count" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Removes a list of products from an order using the provided `product_uuid` " +"and `attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "List all attributes (simple view)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "For non-staff users, only their own wishlists are returned." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Retrieve a single attribute (detailed view)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Create an attribute" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Doesn't work for non-staff users." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Delete an attribute" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Rewrite an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "Rewrite some fields of an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "retrieve current pending wishlist of a user" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "retrieves a current pending wishlist of an authenticated user" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Add a product to the order" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "Adds a product to an wishlist using the provided `product_uuid`" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Remove a product from the wishlist" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "Removes a product from an wishlist using the provided `product_uuid`" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Add many products to the wishlist" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "Adds many products to an wishlist using the provided `product_uuids`" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Remove a product from the order" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Removes many products from an wishlist using the provided `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" +"• **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" +"`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" +"• **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" +"`b64-description=icontains-aGVhdC1jb2xk`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "List all products (simple view)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" +"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 +msgid "retrieve a single product (detailed view)" +msgstr "Retrieve a single product (detailed view)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Rewrite an existing product, preserving non-editable fields" + +#: 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 "" +"Update some fields of an existing product, preserving non-editable fields" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Delete a product" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "lists all permitted feedbacks for a product" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Returns a snapshot of the product's SEO meta data" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "List all addresses" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Retrieve a single address" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Create a new address" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Delete an address" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Update an entire address" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Partially update an address" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Autocomplete address input" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "Raw data query string, please append with data from geo-IP endpoint" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "limits the results amount, 1 < limit < 10, default: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "list all feedbacks (simple view)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "retrieve a single feedback (detailed view)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "create a feedback" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "delete a feedback" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "rewrite an existing feedback saving non-editables" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "rewrite some fields of an existing feedback saving non-editables" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "list all order–product relations (simple view)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "retrieve a single order–product relation (detailed view)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "create a new order–product relation" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "replace an existing order–product relation" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "partially update an existing order–product relation" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "delete an order–product relation" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "add or remove feedback on an order–product relation" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "List all brands (simple view)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Retrieve a single brand (detailed view)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Brand UUID or slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Create a brand" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Delete a brand" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Rewrite an existing brand saving non-editables" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "Rewrite some fields of an existing brand saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "List all vendors (simple view)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Retrieve a single vendor (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Create a vendor" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Delete a vendor" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Rewrite an existing vendor saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "Rewrite some fields of an existing vendor saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "List all product images (simple view)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Retrieve a single product image (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Create a product image" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Delete a product image" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "Rewrite an existing product image saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "Rewrite some fields of an existing product image saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "List all promo codes (simple view)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Retrieve a single promo code (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Create a promo code" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Delete a promo code" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Rewrite an existing promo code saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "Rewrite some fields of an existing promo code saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "List all promotions (simple view)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Retrieve a single promotion (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Create a promotion" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Delete a promotion" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Rewrite an existing promotion saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "Rewrite some fields of an existing promotion saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "List all stocks (simple view)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Retrieve a single stock (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Create a stock record" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Delete a stock record" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "Rewrite an existing stock record saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "Rewrite some fields of an existing stock record saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "List all product tags (simple view)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Retrieve a single product tag (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Create a product tag" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Delete a product tag" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Rewrite an existing product tag saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "Rewrite some fields of an existing product tag saving non-editables" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "No search term provided." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Search" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Name" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Categories" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Categories Slugs" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tags" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Min Price" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Max Price" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Is Active" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Brand" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Attributes" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Quantity" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Slug" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Is Digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Include sub-categories" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Include personal ordered products" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "There must be a category_uuid to use include_subcategories flag" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Search (ID, product name or part number)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Bought after (inclusive)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Bought before (inclusive)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "User email" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "User UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Human Readable ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Parent" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Whole category(has at least 1 product or not)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Level" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Product UUID" + +#: 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:41 +msgid "data to store in cache" +msgstr "Data to store in cache" + +#: 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:47 +msgid "cached data" +msgstr "Cached data" + +#: 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:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "Only URLs starting with http(s):// are allowed" + +#: 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: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: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:137 +msgid "remove all products from the order" +msgstr "Remove all products from the order" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Buy an order" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Remove/Add" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Please provide `wishlist_uuid` value." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Add a product to the order" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Remove a product from the order" + +#: 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:510 +msgid "buy a product" +msgstr "Buy an order" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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" + +#: 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:573 +msgid "action must be either `add` or `remove`" +msgstr "Action must be either `add` or `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Original address string provided by the user" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} does not exist: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - works like a charm" + +#: 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:95 +msgid "grouped attributes" +msgstr "Grouped attributes" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Groups of attributes" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Brands" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Categories" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Tags for this category" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Products in this category" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Vendors" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitude (Y coordinate)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitude (X coordinate)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Comment" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Represents feedback from a user." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Feedback" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Billing address" + +#: 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 "" +"Shipping address for this order, leave blank if same as billing address or " +"if not applicable" + +#: 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:415 +msgid "total quantity of products in order" +msgstr "Total quantity of products in order" + +#: 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:419 +msgid "transactions for this order" +msgstr "Transactions for this order" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Orders" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Image URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Product's images" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Feedbacks" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Attribute groups" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Price" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Quantity" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Number of feedbacks" + +#: 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:484 +msgid "discount price" +msgstr "Discount price" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Products" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promocodes" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Products on sale" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promotions" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Vendor" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Product" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Wishlisted products" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Wishlists" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Tagged products" + +#: 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:665 +msgid "tagged categories" +msgstr "Tagged categories" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Categories' tags" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Project name" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Company Name" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Company Address" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Company Phone Number" + +#: 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:681 +msgid "email host user" +msgstr "Email host user" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Maximum amount for payment" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Minimum amount for payment" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analytics data" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Advertisement data" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configuration" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Language code" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Language name" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Language flag, if exists :)" + +#: 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 +msgid "products search results" +msgstr "Products search results" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Products search results" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Parent of this group" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Parent attribute group" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Attribute group's name" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Attribute group" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Stores credentials and endpoints required for vendor's API communication" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Authentication info" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Define the markup for products retrieved from this vendor" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Vendor markup percentage" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Name of this vendor" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Vendor name" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "response file" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "vendor's last processing response" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Vendor's integration file path" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Integration path" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Internal tag identifier for the product tag" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tag name" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "User-friendly name for the product tag" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Tag display name" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Product tag" + +#: engine/core/models.py:229 +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 "" +"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." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "category tag" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "category tags" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Upload an image representing this category" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Category image" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Define a markup percentage for products in this category" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Parent of this category to form a hierarchical structure" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Parent category" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Category name" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Provide a name for this category" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Add a detailed description for this category" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Category description" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tags that help describe or group this category" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Priority" + +#: engine/core/models.py:438 +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." +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." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Name of this brand" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Brand name" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Upload a logo representing this brand" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Brand small image" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Upload a big logo representing this brand" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Brand big image" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Add a detailed description of the brand" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Brand description" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Optional categories that this brand is associated with" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 " +"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." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "The vendor supplying this product stock" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Associated vendor" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Final price to the customer after markups" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Selling price" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "The product associated with this stock entry" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Associated product" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "The price paid to the vendor for this product" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Vendor purchase price" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Available quantity of the product in stock" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Quantity in stock" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Vendor-assigned SKU for identifying the product" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Vendor's SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Digital file associated with this stock if applicable" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digital file" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "System attributes" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Stock entries" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Category this product belongs to" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Optionally associate this product with a brand" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tags that help describe or group this product" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Indicates whether this product is digitally delivered" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Is product digital" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Provide a clear identifying name for the product" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Product name" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Add a detailed description of the product" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Product description" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Part number for this product" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Part number" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Stock Keeping Unit for this product" + +#: engine/core/models.py:720 +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 " +"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 " +"for dynamic and flexible data structuring." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Group of this attribute" + +#: engine/core/models.py:739 +msgid "string" +msgstr "String" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Integer" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Float" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolean" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Object" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Type of the attribute's value" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Value type" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Name of this attribute" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Attribute's name" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "is filterable" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "designates whether this attribute can be used for filtering or not" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attribute of this value" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "The specific product associated with this attribute's value" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Provide alternative text for the image for accessibility" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Image alt text" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Upload the image file for this product" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Product image" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Determines the order in which images are displayed" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Display priority" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "The product that this image represents" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Product images" + +#: engine/core/models.py:868 +msgid "" +"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." +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." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Percentage discount for the selected products" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Discount percentage" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Provide a unique name for this promotion" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Promotion name" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Promotion description" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Select which products are included in this promotion" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Included products" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promotion" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Represents a user's wishlist for storing and managing desired products. The " +"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." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Products that the user has marked as wanted" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "User who owns this wishlist" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Wishlist's Owner" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Wishlist" + +#: engine/core/models.py:985 +msgid "" +"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." +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." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documentary" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentaries" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Address line for the customer" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Address line" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Street" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "District" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "City" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Postal code" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Country" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolocation Point(Longitude, Latitude)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Full JSON response from geocoder for this address" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Stored JSON response from the geocoding service" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Address" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresses" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Unique code used by a user to redeem a discount" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Promo code identifier" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Fixed discount amount applied if percent is not used" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Fixed discount amount" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Percentage discount applied if fixed amount is not used" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Percentage discount" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Timestamp when the promocode expires" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "End validity time" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Timestamp from which this promocode is valid" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Start validity time" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "Timestamp when the promocode was used, blank if not used yet" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Usage timestamp" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "User assigned to this promocode if applicable" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Assigned user" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Promo code" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Promo codes" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Only one type of discount should be defined (amount or percent), but not " +"both or neither." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promocode has been used already" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Invalid discount type for promocode {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "The billing address used for this order" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Optional promo code applied to this order" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Applied promo code" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "The shipping address used for this order" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Shipping address" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Current status of the order in its lifecycle" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Order status" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON structure of notifications to display to users, in admin UI the table-" +"view is used" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON representation of order attributes for this order" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "The user who placed the order" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "User" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "The timestamp when the order was finalized" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Buy time" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "A human-readable identifier for the order" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "human-readable ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Order" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "A user must have only one pending order at a time!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "You cannot add products to an order that is not a pending one" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "You cannot add inactive products to order" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "You cannot add more products than available in stock" + +#: 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 "You cannot remove products from an order that is not a pending one" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} does not exist with query <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promocode does not exist" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "You can only buy physical products with shipping address specified!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Address does not exist" + +#: 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 "" +"You can not purchase at this moment, please try again in a few minutes." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Invalid force value" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "You cannot purchase an empty order!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "You cannot buy an order without a user!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "A user without a balance cannot buy with balance!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Insufficient funds to complete the order" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Invalid payment method: {payment_method} from {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "User-provided comments about their experience with the product" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "Feedback comments" + +#: engine/core/models.py:1719 +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" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Related order product" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "User-assigned rating for the product" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Product rating" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "The price paid by the customer for this product at purchase time" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Purchase price at order time" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Internal comments for admins about this ordered product" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Internal comments" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "User notifications" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON representation of this item's attributes" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Ordered product attributes" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Reference to the parent order that contains this product" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Parent order" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "The specific product associated with this order line" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Quantity of this specific product in the order" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Product quantity" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Current status of this product in the order" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Product line status" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct must have an associated order!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Wrong action specified for feedback: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "you cannot feedback an order which is not received" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Name" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL of the integration" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Authentication credentials" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "You can only have one default CRM provider" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRMs" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Order's CRM link" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Orders' CRM links" + +#: engine/core/models.py:1947 +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." +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." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Download" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Downloads" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"you must provide a comment, rating, and order product uuid to add feedback." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Home" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Contact Us" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "About Us" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Customers mix (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "New customers" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Returning customers" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "No customer activity in the last 30 days." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Daily sales" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Orders (FINISHED)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Gross revenue" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Orders" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Income overview" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Net revenue" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Taxes" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Returns" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Gross revenue" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "No data" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Net revenue" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Refund rate" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Returned" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Low stock" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "No low stock items." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Most returned products (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "No returns in the last 30 days." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Most wished products" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "No data yet." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Most popular products" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Quick Links" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "No links available." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Shipped vs Digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Shipped" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Top categories by quantity (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "No category sales in the last 30 days." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site admin" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Order Confirmation" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hello %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" 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:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Total" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Total Price" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"If you have any questions, feel free to contact our support at " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Best regards,
the %(config.PROJECT_NAME)s team" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "All rights reserved" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Order Delivered" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hello %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"We have successfully processed your order №%(order_uuid)s! Below are the " +"details of your order:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"additional\n" +" information" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Value" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"If you have any questions, feel free to contact our support at " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Best regards,
the %(project_name)s team" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Key" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Add Row" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promocode granted" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for" + +#: 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" +" 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:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Shipping price" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Your order will be delivered to the following address:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Best regards,
The %(config.PROJECT_NAME)s team" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"All rights\n" +" reserved" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Both data and timeout are required" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contact us initiated" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | order confirmation" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order delivered" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "You do not have permission to perform this action." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "NOMINATIM_URL parameter must be configured!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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:106 +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 "" +"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." + +#: engine/core/views.py:141 +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:173 +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:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Handles `contact us` form submissions." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Handles global search queries." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid is required" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "order product does not exist" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "You can only download the digital asset once" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "The order product does not have a product" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon not found" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"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:429 +msgid "Returns current version of the eVibes. " +msgstr "Returns current version of the eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Revenue & Orders (last %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." + +#: 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." +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." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." + +#: 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." +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." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." + +#: 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 "" +"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." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." + +#: 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 " +"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 " +"use of Django's filtering system for querying data." + +#: 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 " +"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 " +"enforces permissions accordingly while interacting with order data." + +#: 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 " +"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 " +"feedback on OrderProduct instances" + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." + +#: 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: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: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 " +"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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Geocoding error: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.mo b/engine/core/locale/en_US/LC_MESSAGES/django.mo new file mode 100644 index 00000000..8ca2e25a Binary files /dev/null and b/engine/core/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.po b/engine/core/locale/en_US/LC_MESSAGES/django.po new file mode 100644 index 00000000..8c77408e --- /dev/null +++ b/engine/core/locale/en_US/LC_MESSAGES/django.po @@ -0,0 +1,3416 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: en-us\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Unique ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "Unique ID is used to surely identify any database object" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Is Active" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Created" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "When the object first appeared on the database" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modified" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "When the object was last edited" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Translations" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "General" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relations" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "additional info" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Timestamps" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Selected items have been activated!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Selected items have been deactivated!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Attribute Values" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Image" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Images" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stock" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Stocks" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Order Product" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Children" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Config" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Core" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Finished" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Delivering" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Delivered" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Canceled" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Failed" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Pending" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Accepted" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Money Returned" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Payment" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Successful" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "OpenAPI schema in selected format with selected language" + +#: engine/core/docs/drf/views.py:33 +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 "" +"OpenApi3 schema for this API. Format can be selected via content " +"negotiation. Language can be selected with Accept-Language and query " +"parameter both." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"Apply only a key to read permitted data from cache.\n" +"Apply key, data and timeout with authentication to write data to cache." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Get a list of supported languages" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Get application's exposable parameters" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Request a CORSed URL. Only https allowed." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Search between products, categories and brands" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Global search endpoint to query across project's tables" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Purchase an order as a Business" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "download a digital asset from purchased digital order" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "List all attribute groups (simple view)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Retrieve a single attribute group (detailed view)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Create an attribute group" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Delete an attribute group" + +#: engine/core/docs/drf/viewsets.py:89 +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" +msgstr "" +"Rewrite some fields of an existing attribute group saving non-editables" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "List all attributes (simple view)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Retrieve a single attribute (detailed view)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Create an attribute" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Delete an attribute" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Rewrite an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "Rewrite some fields of an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "List all attribute values (simple view)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Retrieve a single attribute value (detailed view)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Create an attribute value" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Delete an attribute value" + +#: engine/core/docs/drf/viewsets.py:179 +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" +msgstr "" +"Rewrite some fields of an existing attribute value saving non-editables" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "List all categories (simple view)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Retrieve a single category (detailed view)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Category UUID or slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Create a category" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Delete a category" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Rewrite an existing category saving non-editables" + +#: 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 "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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returns a snapshot of the category's SEO meta data" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "List all categories (simple view)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"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" +msgstr "Filter orders with buy_time >= this ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filter orders with buy_time <= this ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filter by exact order UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filter by exact human-readable order ID" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "Filter by user's email (case-insensitive exact match)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filter by user's UUID" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +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')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Retrieve a single category (detailed view)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Order UUID or human-readable id" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Create an attribute" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Doesn't work for non-staff users." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Delete an attribute" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Rewrite an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "Rewrite some fields of an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Purchase price at order time" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"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." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "retrieve current pending order of a user" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "purchase an order without account creation" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finalizes the order purchase for a non-registered user." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Add a product to the order" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adds a product to an order using the provided `product_uuid` and " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Add a list of products to order, quantities will not count" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Remove a product from the order" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Removes a product from an order using the provided `product_uuid` and " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Remove a product from order, quantities will not count" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Removes a list of products from an order using the provided `product_uuid` " +"and `attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "List all attributes (simple view)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "For non-staff users, only their own wishlists are returned." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Retrieve a single attribute (detailed view)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Create an attribute" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Doesn't work for non-staff users." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Delete an attribute" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Rewrite an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "Rewrite some fields of an existing attribute saving non-editables" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "retrieve current pending wishlist of a user" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "retrieves a current pending wishlist of an authenticated user" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Add a product to the order" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "Adds a product to an wishlist using the provided `product_uuid`" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Remove a product from the wishlist" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "Removes a product from an wishlist using the provided `product_uuid`" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Add many products to the wishlist" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "Adds many products to an wishlist using the provided `product_uuids`" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Remove a product from the order" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Removes many products from an wishlist using the provided `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" +"• **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" +"`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" +"• **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" +"`b64-description=icontains-aGVhdC1jb2xk`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "List all products (simple view)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" +"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 +msgid "retrieve a single product (detailed view)" +msgstr "Retrieve a single product (detailed view)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Rewrite an existing product, preserving non-editable fields" + +#: 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 "" +"Update some fields of an existing product, preserving non-editable fields" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Delete a product" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "lists all permitted feedbacks for a product" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Returns a snapshot of the product's SEO meta data" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "List all addresses" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Retrieve a single address" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Create a new address" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Delete an address" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Update an entire address" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Partially update an address" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Autocomplete address input" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "Raw data query string, please append with data from geo-IP endpoint" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "limits the results amount, 1 < limit < 10, default: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "list all feedbacks (simple view)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "retrieve a single feedback (detailed view)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "create a feedback" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "delete a feedback" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "rewrite an existing feedback saving non-editables" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "rewrite some fields of an existing feedback saving non-editables" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "list all order–product relations (simple view)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "retrieve a single order–product relation (detailed view)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "create a new order–product relation" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "replace an existing order–product relation" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "partially update an existing order–product relation" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "delete an order–product relation" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "add or remove feedback on an order–product relation" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "List all brands (simple view)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Retrieve a single brand (detailed view)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Brand UUID or slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Create a brand" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Delete a brand" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Rewrite an existing brand saving non-editables" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "Rewrite some fields of an existing brand saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "List all vendors (simple view)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Retrieve a single vendor (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Create a vendor" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Delete a vendor" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Rewrite an existing vendor saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "Rewrite some fields of an existing vendor saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "List all product images (simple view)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Retrieve a single product image (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Create a product image" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Delete a product image" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "Rewrite an existing product image saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "Rewrite some fields of an existing product image saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "List all promo codes (simple view)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Retrieve a single promo code (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Create a promo code" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Delete a promo code" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Rewrite an existing promo code saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "Rewrite some fields of an existing promo code saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "List all promotions (simple view)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Retrieve a single promotion (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Create a promotion" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Delete a promotion" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Rewrite an existing promotion saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "Rewrite some fields of an existing promotion saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "List all stocks (simple view)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Retrieve a single stock (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Create a stock record" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Delete a stock record" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "Rewrite an existing stock record saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "Rewrite some fields of an existing stock record saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "List all product tags (simple view)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Retrieve a single product tag (detailed view)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Create a product tag" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Delete a product tag" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Rewrite an existing product tag saving non-editables" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "Rewrite some fields of an existing product tag saving non-editables" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "No search term provided." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Search" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Name" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Categories" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Categories Slugs" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tags" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Min Price" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Max Price" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Is Active" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Brand" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Attributes" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Quantity" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Slug" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Is Digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Include sub-categories" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Include personal ordered products" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "There must be a category_uuid to use include_subcategories flag" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Search (ID, product name or part number)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Bought after (inclusive)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Bought before (inclusive)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "User email" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "User UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Human Readable ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Parent" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Whole category(has at least 1 product or not)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Level" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Product UUID" + +#: 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:41 +msgid "data to store in cache" +msgstr "Data to store in cache" + +#: 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:47 +msgid "cached data" +msgstr "Cached data" + +#: 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:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "Only URLs starting with http(s):// are allowed" + +#: 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: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: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:137 +msgid "remove all products from the order" +msgstr "Remove all products from the order" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Buy an order" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Remove/Add" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Please provide `wishlist_uuid` value." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Add a product to the order" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Remove a product from the order" + +#: 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:510 +msgid "buy a product" +msgstr "Buy an order" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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" + +#: 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:573 +msgid "action must be either `add` or `remove`" +msgstr "Action must be either `add` or `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Original address string provided by the user" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} does not exist: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - works like a charm" + +#: 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:95 +msgid "grouped attributes" +msgstr "Grouped attributes" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Groups of attributes" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Brands" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Categories" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Tags for this category" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Products in this category" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Vendors" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitude (Y coordinate)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitude (X coordinate)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "How to" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Represents feedback from a user." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Feedback" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Billing address" + +#: 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 "" +"Shipping address for this order, leave blank if same as billing address or " +"if not applicable" + +#: 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:415 +msgid "total quantity of products in order" +msgstr "Total quantity of products in order" + +#: 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:419 +msgid "transactions for this order" +msgstr "Transactions for this order" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Orders" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Image URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Product's images" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Feedbacks" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Attribute groups" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Price" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Quantity" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Number of feedbacks" + +#: 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:484 +msgid "discount price" +msgstr "Discount price" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Products" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promocodes" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Products on sale" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promotions" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Vendor" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Product" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Wishlisted products" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Wishlists" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Tagged products" + +#: 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:665 +msgid "tagged categories" +msgstr "Tagged categories" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Categories' tags" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Project name" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Company Name" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Company Address" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Company Phone Number" + +#: 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:681 +msgid "email host user" +msgstr "Email host user" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Maximum amount for payment" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Minimum amount for payment" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analytics data" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Advertisement data" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configuration" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Language code" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Language name" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Language flag, if exists :)" + +#: 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 +msgid "products search results" +msgstr "Products search results" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Products search results" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Parent of this group" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Parent attribute group" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Attribute group's name" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Attribute group" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Stores credentials and endpoints required for vendor's API communication" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Authentication info" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Define the markup for products retrieved from this vendor" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Vendor markup percentage" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Name of this vendor" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Vendor name" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "response file" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "vendor's last processing response" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Vendor's integration file path" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Integration path" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Internal tag identifier for the product tag" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tag name" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "User-friendly name for the product tag" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Tag display name" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Product tag" + +#: engine/core/models.py:229 +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 "" +"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." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "category tag" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "category tags" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Upload an image representing this category" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Category image" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Define a markup percentage for products in this category" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Parent of this category to form a hierarchical structure" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Parent category" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Category name" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Provide a name for this category" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Add a detailed description for this category" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Category description" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tags that help describe or group this category" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Priority" + +#: engine/core/models.py:438 +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." +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." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Name of this brand" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Brand name" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Upload a logo representing this brand" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Brand small image" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Upload a big logo representing this brand" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Brand big image" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Add a detailed description of the brand" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Brand description" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Optional categories that this brand is associated with" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 " +"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." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "The vendor supplying this product stock" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Associated vendor" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Final price to the customer after markups" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Selling price" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "The product associated with this stock entry" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Associated product" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "The price paid to the vendor for this product" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Vendor purchase price" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Available quantity of the product in stock" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Quantity in stock" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Vendor-assigned SKU for identifying the product" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Vendor's SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Digital file associated with this stock if applicable" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digital file" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "System attributes" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Stock entries" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Category this product belongs to" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Optionally associate this product with a brand" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tags that help describe or group this product" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Indicates whether this product is digitally delivered" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Is product digital" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Provide a clear identifying name for the product" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Product name" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Add a detailed description of the product" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Product description" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Part number for this product" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Part number" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Stock Keeping Unit for this product" + +#: engine/core/models.py:720 +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 " +"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 " +"for dynamic and flexible data structuring." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Group of this attribute" + +#: engine/core/models.py:739 +msgid "string" +msgstr "String" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Integer" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Float" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolean" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Object" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Type of the attribute's value" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Value type" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Name of this attribute" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Attribute's name" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "is filterable" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "designates whether this attribute can be used for filtering or not" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attribute of this value" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "The specific product associated with this attribute's value" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Provide alternative text for the image for accessibility" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Image alt text" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Upload the image file for this product" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Product image" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Determines the order in which images are displayed" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Display priority" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "The product that this image represents" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Product images" + +#: engine/core/models.py:868 +msgid "" +"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." +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." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Percentage discount for the selected products" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Discount percentage" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Provide a unique name for this promotion" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Promotion name" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Promotion description" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Select which products are included in this promotion" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Included products" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promotion" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Represents a user's wishlist for storing and managing desired products. The " +"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." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Products that the user has marked as wanted" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "User who owns this wishlist" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Wishlist's Owner" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Wishlist" + +#: engine/core/models.py:985 +msgid "" +"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." +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." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documentary" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentaries" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Address line for the customer" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Address line" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Street" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "District" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "City" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Postal code" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Country" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolocation Point(Longitude, Latitude)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Full JSON response from geocoder for this address" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Stored JSON response from the geocoding service" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Address" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresses" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Unique code used by a user to redeem a discount" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Promo code identifier" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Fixed discount amount applied if percent is not used" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Fixed discount amount" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Percentage discount applied if fixed amount is not used" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Percentage discount" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Timestamp when the promocode expires" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "End validity time" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Timestamp from which this promocode is valid" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Start validity time" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "Timestamp when the promocode was used, blank if not used yet" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Usage timestamp" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "User assigned to this promocode if applicable" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Assigned user" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Promo code" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Promo codes" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Only one type of discount should be defined (amount or percent), but not " +"both or neither." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promocode has been used already" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Invalid discount type for promocode {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "The billing address used for this order" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Optional promo code applied to this order" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Applied promo code" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "The shipping address used for this order" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Shipping address" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Current status of the order in its lifecycle" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Order status" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON structure of notifications to display to users, in admin UI the table-" +"view is used" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON representation of order attributes for this order" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "The user who placed the order" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "User" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "The timestamp when the order was finalized" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Buy time" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "A human-readable identifier for the order" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "human-readable ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Order" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "A user must have only one pending order at a time!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "You cannot add products to an order that is not a pending one" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "You cannot add inactive products to order" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "You cannot add more products than available in stock" + +#: 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 "You cannot remove products from an order that is not a pending one" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} does not exist with query <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promocode does not exist" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "You can only buy physical products with shipping address specified!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Address does not exist" + +#: 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 "" +"You can not purchase at this moment, please try again in a few minutes." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Invalid force value" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "You cannot purchase an empty order!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "You cannot buy an order without a user!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "A user without a balance cannot buy with balance!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Insufficient funds to complete the order" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Invalid payment method: {payment_method} from {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "User-provided comments about their experience with the product" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "Feedback comments" + +#: engine/core/models.py:1719 +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" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Related order product" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "User-assigned rating for the product" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Product rating" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "The price paid by the customer for this product at purchase time" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Purchase price at order time" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Internal comments for admins about this ordered product" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Internal comments" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "User notifications" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON representation of this item's attributes" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Ordered product attributes" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Reference to the parent order that contains this product" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Parent order" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "The specific product associated with this order line" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Quantity of this specific product in the order" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Product quantity" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Current status of this product in the order" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Product line status" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct must have an associated order!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Wrong action specified for feedback: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "you cannot feedback an order which is not received" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Name" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL of the integration" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Authentication credentials" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "You can only have one default CRM provider" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRMs" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Order's CRM link" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Orders' CRM links" + +#: engine/core/models.py:1947 +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." +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." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Download" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Downloads" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"you must provide a comment, rating, and order product uuid to add feedback." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Home" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Contact Us" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "About Us" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Customers mix (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "New customers" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Returning customers" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "No customer activity in the last 30 days." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Daily sales" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Orders (FINISHED)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Gross revenue" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Orders" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Income overview" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Net revenue" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Taxes" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Returns" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Gross revenue" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "No date" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Net revenue" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Refund rate" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Returned" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Low stock" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "No low stock items." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Most returned products (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "No returns in the last 30 days." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Most wished products" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "No data yet." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Most popular products" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Quick Links" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "No links available." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Shipped vs Digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Shipped" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Top categories by quantity (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "No category sales in the last 30 days." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site admin" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Order Confirmation" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hello %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" 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:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Total" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Total Price" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"If you have any questions, feel free to contact our support at " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Best regards,
the %(config.PROJECT_NAME)s team" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "All rights reserved" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Order Delivered" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hello %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"We have successfully processed your order №%(order_uuid)s! Below are the " +"details of your order:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"additional\n" +" information" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Value" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"If you have any questions, feel free to contact our support at " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Best regards,
the %(project_name)s team" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Key" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Add Row" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promocode granted" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for" + +#: 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" +" 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:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Shipping price" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Your order will be delivered to the following address:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Best regards,
The %(config.PROJECT_NAME)s team" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"all rights\n" +" reserved" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Both data and timeout are required" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contact us initiated" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | order confirmation" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order delivered" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "You do not have permission to perform this action." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "NOMINATIM_URL parameter must be configured!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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:106 +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 "" +"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." + +#: engine/core/views.py:141 +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:173 +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:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Handles `contact us` form submissions." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Handles global search queries." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid is required" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "order product does not exist" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "You can only download the digital asset once" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "The order product does not have a product" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon not found" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"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:429 +msgid "Returns current version of the eVibes. " +msgstr "Returns current version of the eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Revenue & Orders (last %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." + +#: 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." +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." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." + +#: 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." +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." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." + +#: 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 "" +"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." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." + +#: 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 " +"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 " +"use of Django's filtering system for querying data." + +#: 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 " +"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 " +"enforces permissions accordingly while interacting with order data." + +#: 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 " +"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 " +"feedback on OrderProduct instances" + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." + +#: 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: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: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 " +"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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Geocoding error: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.mo b/engine/core/locale/es_ES/LC_MESSAGES/django.mo new file mode 100644 index 00000000..aa7fc2f6 Binary files /dev/null and b/engine/core/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.po b/engine/core/locale/es_ES/LC_MESSAGES/django.po new file mode 100644 index 00000000..e38de311 --- /dev/null +++ b/engine/core/locale/es_ES/LC_MESSAGES/django.po @@ -0,0 +1,3520 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: es-es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Identificación única" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"El identificador único se utiliza para identificar con seguridad cualquier " +"objeto de la base de datos" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Está activo" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Creado" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Cuando el objeto apareció por primera vez en la base de datos" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modificado" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Cuándo se editó el objeto por última vez" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Traducciones" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "General" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relaciones" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "información adicional" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadatos" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Marcas de tiempo" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Los artículos seleccionados se han activado." + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Los artículos seleccionados se han desactivado." + +#: 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: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:172 +msgid "image" +msgstr "Imagen" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Imágenes" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stock" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Acciones" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Pedir un producto" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Niños" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Configurar" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Núcleo" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Terminado" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "En" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Entregado" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Cancelado" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Fallido" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Pendiente" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Aceptado" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Dinero devuelto" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Pago" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momento" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Éxito" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Esquema OpenAPI en el formato seleccionado con el idioma seleccionado" + +#: engine/core/docs/drf/views.py:33 +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 "" +"Esquema OpenApi3 para esta API. El formato se puede seleccionar mediante la " +"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:37 +msgid "cache I/O" +msgstr "E/S de caché" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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é." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Obtener una lista de los idiomas admitidos" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Obtener los parámetros exponibles de la aplicación" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Solicitar una URL CORSed. Solo se permite https." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Búsqueda entre productos, categorías y marcas" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Punto final de búsqueda global para consultar todas las tablas del proyecto" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Comprar un pedido como empresa" + +#: engine/core/docs/drf/views.py:146 +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`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "descargar un activo digital de un pedido digital adquirido" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Lista de todos los grupos de atributos (vista simple)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Recuperar un único grupo de atributos (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Crear un grupo de atributos" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Eliminar un grupo de atributos" + +#: engine/core/docs/drf/viewsets.py:89 +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" +msgstr "" +"Reescribir algunos campos de un grupo de atributos existente guardando los " +"no editables" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Listar todos los atributos (vista simple)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Recuperar un único atributo (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Crear un atributo" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Borrar un atributo" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +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" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Listar todos los valores de atributos (vista simple)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Recuperar un único valor de atributo (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Crear un valor de atributo" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Borrar un valor de atributo" + +#: engine/core/docs/drf/viewsets.py:179 +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" +msgstr "" +"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)" +msgstr "Lista de todas las categorías (vista simple)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Recuperar una sola categoría (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "UUID o slug de la categoría" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Crear una categoría" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Eliminar una categoría" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Reescribir una categoría existente guardando los no editables" + +#: 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 "" +"Reescribir algunos campos de una categoría existente guardando los no " +"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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Devuelve una instantánea de los metadatos SEO de la categoría" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Lista de todas las categorías (vista simple)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Para los usuarios que no forman parte del personal, sólo se devuelven sus " +"propios pedidos." + +#: 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" +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" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Filtrar los pedidos con buy_time >= esta fecha ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrar pedidos con hora de compra <= esta fecha ISO 8601" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrar por UUID de pedido exacto" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +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)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrar por UUID de usuario" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filtrar por estado del pedido (coincidencia de subcadenas insensible a " +"mayúsculas y minúsculas)" + +#: 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')." +msgstr "" +"Ordenar por: uuid, human_readable_id, user_email, user, status, created, " +"modified, buy_time, random. Utilice el prefijo '-' para orden descendente " +"(por ejemplo, '-tiempo_compra')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Recuperar una sola categoría (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "UUID del pedido o identificador legible" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Crear un atributo" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "No funciona para los usuarios que no son personal." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Borrar un atributo" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Reescribir una categoría existente guardando los no editables" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Precio de compra en el momento del pedido" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Finaliza la compra del pedido. Si se utiliza `force_balance`, la compra se " +"finaliza utilizando el saldo del usuario; Si se utiliza `force_payment`, se " +"inicia una transacción." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "recuperar el pedido pendiente actual de un usuario" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "comprar un pedido sin crear una cuenta" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finaliza la compra del pedido para un usuario no registrado." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Añadir un producto al pedido" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Añade un producto a un pedido utilizando el `product_uuid` y los " +"`attributes` proporcionados." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Añadir una lista de productos a la orden, las cantidades no contarán" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Añade una lista de productos a un pedido utilizando el `product_uuid` y los " +"`attributes` proporcionados." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Eliminar un producto del pedido" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Elimina un producto de un pedido utilizando el `product_uuid` y los " +"`attributes` proporcionados." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Eliminar un producto del pedido, las cantidades no contarán" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Elimina una lista de productos de un pedido utilizando el `product_uuid` y " +"los `attributes` proporcionados." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Listar todos los atributos (vista simple)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Para los usuarios que no forman parte del personal, sólo se devuelven sus " +"propias listas de deseos." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Recuperar un único atributo (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Crear un atributo" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "No funciona para los usuarios que no son personal." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Borrar un atributo" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +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" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "recuperar la lista de deseos pendiente de un usuario" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "recupera una lista de deseos pendiente de un usuario autenticado" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Añadir un producto al pedido" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Añade un producto a una lista de deseos utilizando el `product_uuid` " +"proporcionado" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Eliminar un producto de la lista de deseos" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Elimina un producto de una lista de deseos utilizando el `product_uuid` " +"proporcionado." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Añadir muchos productos a la lista de deseos" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Añade varios productos a una lista de deseos utilizando los `product_uuids` " +"proporcionados." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Eliminar un producto del pedido" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Elimina varios productos de una lista de deseos utilizando los " +"`product_uuids` proporcionados." + +#: 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" +"• **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" +"`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" +"Ejemplos: \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 +msgid "list all products (simple view)" +msgstr "Listar todos los productos (vista simple)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" +"**Permitido:** 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)" +msgstr "Recuperar un solo producto (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Reescribir un producto existente conservando los campos no editables" + +#: 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 "" +"Actualizar algunos campos de un producto existente, conservando los campos " +"no editables" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Eliminar un producto" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "enumera todas las opiniones permitidas sobre un producto" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Devuelve una instantánea de los metadatos SEO del producto" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Enumerar todas las direcciones" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Recuperar una única dirección" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Crear una nueva dirección" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Borrar una dirección" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Actualizar una dirección completa" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Actualizar parcialmente una dirección" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Autocompletar direcciones" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Cadena de consulta de datos sin procesar, adjunte los datos del punto final " +"geo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "limita la cantidad de resultados, 1 < límite < 10, por defecto: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "lista de todas las reacciones (vista simple)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "recuperar una sola respuesta (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "crear una retroalimentación" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "eliminar un comentario" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "reescribir una respuesta existente guardando los no editables" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "listar todas las relaciones pedido-producto (vista simple)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "recuperar una única relación pedido-producto (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "crear una nueva relación pedido-producto" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "sustituir una relación pedido-producto existente" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "actualizar parcialmente una relación pedido-producto existente" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "suprimir una relación pedido-producto" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "añadir o eliminar comentarios en una relación pedido-producto" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Lista de todas las marcas (vista simple)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Recuperar una sola marca (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID o slug de la marca" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Crear una marca" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Borrar una marca" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Reescribir una marca existente ahorrando no editables" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Listar todos los vendedores (vista simple)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Recuperar un único proveedor (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Crear un proveedor" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Eliminar un proveedor" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Reescribir un proveedor existente guardando los no editables" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Listar todas las imágenes de los productos (vista simple)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Recuperar una sola imagen del producto (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Crear una imagen del producto" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +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" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Listar todos los códigos promocionales (vista simple)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Recuperar un único código promocional (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Crear un código promocional" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Eliminar un código promocional" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Reescribir un código promocional existente guardando los no editables" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Lista de todas las promociones (vista simple)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Recuperar una sola promoción (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Crear una promoción" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Eliminar una promoción" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Reescribir una promoción existente guardando los no editables" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Listar todas las acciones (vista simple)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Recuperar una sola acción (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Crear una ficha de existencias" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Borrar una ficha de existencias" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Reescribir un registro de existencias existente guardando los no editables" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Listar todas las etiquetas de productos (vista simple)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Recuperar una sola etiqueta de producto (vista detallada)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Crear una etiqueta de producto" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Eliminar una etiqueta de producto" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" +"Reescribir una etiqueta de producto existente guardando los no editables" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Reescribir algunos campos de una categoría existente guardando los no " +"editables" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "No se proporciona ningún término de búsqueda." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Buscar en" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Nombre" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Categorías" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Categorías Babosas" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Etiquetas" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Precio mínimo" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Precio máximo" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Está activo" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Marca" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Atributos" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Cantidad" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Babosa" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Es Digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Incluir subcategorías" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Incluir productos personales solicitados" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +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" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Búsqueda (ID, nombre del producto o número de pieza)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Comprado después (inclusive)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Comprado antes (inclusive)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Correo electrónico del usuario" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID de usuario" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Estado" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Identificación legible" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Padres" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Toda la categoría (tenga o no al menos 1 producto)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Nivel" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID del producto" + +#: 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:41 +msgid "data to store in cache" +msgstr "Datos a almacenar en caché" + +#: 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:47 +msgid "cached data" +msgstr "Datos en caché" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Añadir un producto al pedido" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Eliminar todos los productos del pedido" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Comprar un pedido" + +#: 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: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}" + +#: 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:250 +msgid "remove/add" +msgstr "Quitar/Agregar" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Por favor, proporcione el valor `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Añadir un producto al pedido" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "Eliminar un producto del pedido" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "Eliminar un producto del pedido" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "Eliminar un producto del pedido" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "Comprar un pedido" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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" + +#: 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:573 +msgid "action must be either `add` or `remove`" +msgstr "La acción debe ser \"añadir\" o \"eliminar\"." + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Cadena de dirección original proporcionada por el usuario" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} no existe: ¡{uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - funciona a las mil maravillas" + +#: 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:95 +msgid "grouped attributes" +msgstr "Atributos agrupados" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Grupos de atributos" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Marcas" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Categorías" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Etiquetas para esta categoría" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Productos de esta categoría" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Vendedores" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitud (coordenada Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitud (coordenada X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Cómo" + +#: 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." + +#: 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:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244 +msgid "notifications" +msgstr "Notificaciones" + +#: 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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Comentarios" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Dirección de facturación" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Precio total de este pedido" + +#: 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: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:419 +msgid "transactions for this order" +msgstr "Transacciones para este pedido" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Pedidos" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL de la imagen" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Imágenes del producto" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Comentarios" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Grupos de atributos" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Precio" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Cantidad" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Número de reacciones" + +#: 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:484 +msgid "discount price" +msgstr "Precio reducido" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Productos" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Códigos promocionales" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Productos a la venta" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promociones" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Vendedor" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Producto" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Productos deseados" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Listas de deseos" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Productos con etiqueta" + +#: 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:665 +msgid "tagged categories" +msgstr "Categorías" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Etiquetas de las categorías" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Nombre del proyecto" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Nombre de la empresa" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Dirección de la empresa" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Teléfono de la empresa" + +#: 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:681 +msgid "email host user" +msgstr "Correo electrónico del usuario anfitrión" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Importe máximo de pago" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Importe mínimo de pago" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Datos analíticos" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Datos publicitarios" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configuración" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Código de idioma" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Nombre de la lengua" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Bandera de idioma, si existe :)" + +#: 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 +msgid "products search results" +msgstr "Resultados de la búsqueda de productos" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Resultados de la búsqueda de productos" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Padre de este grupo" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Grupo de atributos padre" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Nombre del grupo de atributos" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Grupo de atributos" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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 " +"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 " +"que interactúan con proveedores externos." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Almacena las credenciales y los puntos finales necesarios para la " +"comunicación API del proveedor" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Información de autenticación" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" +"Definir el margen de beneficio para los productos recuperados de este " +"proveedor" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Porcentaje de margen del vendedor" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Nombre de este vendedor" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Nombre del vendedor" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "archivo de respuesta" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "última respuesta de procesamiento del proveedor" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Ruta del archivo de integración del proveedor" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Vía de integración" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Representa una etiqueta de producto utilizada para clasificar o identificar " +"productos. La clase ProductTag está diseñada para identificar y clasificar " +"productos de forma única mediante una combinación de un identificador de " +"etiqueta interno y un nombre de visualización fácil de usar. Admite " +"operaciones exportadas a través de mixins y proporciona personalización de " +"metadatos con fines administrativos." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Identificador interno de la etiqueta del producto" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Nombre de la etiqueta" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Nombre fácil de usar para la etiqueta del producto" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Nombre de la etiqueta" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Etiqueta del producto" + +#: engine/core/models.py:229 +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 "" +"Representa una etiqueta de categoría utilizada para los productos. Esta " +"clase modela una etiqueta de categoría que puede utilizarse para asociar y " +"clasificar productos. Incluye atributos para un identificador de etiqueta " +"interno y un nombre de visualización fácil de usar." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "etiqueta de categoría" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "etiquetas de categoría" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Representa una entidad de categoría para organizar y agrupar elementos " +"relacionados en una estructura jerárquica. Las categorías pueden tener " +"relaciones jerárquicas con otras categorías, admitiendo relaciones padre-" +"hijo. La clase incluye campos para metadatos y representación visual, que " +"sirven de base para las funciones relacionadas con las categorías. Esta " +"clase se utiliza normalmente para definir y gestionar categorías de " +"productos u otras agrupaciones similares dentro de una aplicación, " +"permitiendo a los usuarios o administradores especificar el nombre, la " +"descripción y la jerarquía de las categorías, así como asignar atributos " +"como imágenes, etiquetas o prioridad." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Cargar una imagen que represente esta categoría" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Categoría imagen" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Definir un porcentaje de recargo para los productos de esta categoría" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Padre de esta categoría para formar una estructura jerárquica" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Categoría de padres" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Nombre de la categoría" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Indique un nombre para esta categoría" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Añadir una descripción detallada para esta categoría" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Descripción de la categoría" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "etiquetas que ayudan a describir o agrupar esta categoría" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Prioridad" + +#: engine/core/models.py:438 +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." +msgstr "" +"Representa un objeto Marca en el sistema. Esta clase maneja información y " +"atributos relacionados con una marca, incluyendo su nombre, logotipos, " +"descripción, categorías asociadas, un slug único y orden de prioridad. " +"Permite organizar y representar los datos relacionados con la marca dentro " +"de la aplicación." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Nombre de esta marca" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Marca" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Cargar un logotipo que represente a esta marca" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Marca pequeña imagen" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Sube un logotipo grande que represente a esta marca" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Gran imagen de marca" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Añadir una descripción detallada de la marca" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Descripción de la marca" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Categorías opcionales a las que se asocia esta marca" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"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 " +"seguimiento y la evaluación de los productos disponibles de varios " +"vendedores." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "El vendedor que suministra este producto dispone de" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Proveedor asociado" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Precio final al cliente después de márgenes" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Precio de venta" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "El producto asociado a esta entrada en stock" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Producto asociado" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "El precio pagado al vendedor por este producto" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Precio de compra al vendedor" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Cantidad disponible del producto en stock" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Cantidad en stock" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU asignada por el proveedor para identificar el producto" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "SKU del vendedor" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Archivo digital asociado a esta acción, si procede" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Archivo digital" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Atributos del sistema" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Entradas en existencias" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +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." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Categoría a la que pertenece este producto" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Si lo desea, puede asociar este producto a una marca" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Etiquetas que ayudan a describir o agrupar este producto" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Indica si este producto se entrega digitalmente" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "¿Es digital el producto?" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Proporcionar un nombre que identifique claramente el producto" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Nombre del producto" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Añada una descripción detallada del producto" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Descripción del producto" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Número de pieza de este producto" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Número de pieza" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Unidad de Mantenimiento de Existencias para este producto" + +#: engine/core/models.py:720 +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 " +"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, " +"enteros, flotantes, booleanos, matrices y objetos. Esto permite una " +"estructuración dinámica y flexible de los datos." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Grupo de este atributo" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Cadena" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Entero" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Flotador" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Booleano" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Matriz" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objeto" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Tipo del valor del atributo" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Tipo de valor" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Nombre de este atributo" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Nombre del atributo" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "es filtrable" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Qué atributos y valores se pueden utilizar para filtrar esta categoría." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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 " +"organización y representación dinámica de las características del producto." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Atributo de este valor" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "El producto específico asociado al valor de este atributo" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Representa una imagen de producto asociada a un producto del sistema. Esta " +"clase está diseñada para gestionar imágenes de productos, incluyendo " +"funcionalidades para subir archivos de imagen, asociarlos a productos " +"específicos y determinar su orden de visualización. También incluye una " +"función de accesibilidad con texto alternativo para las imágenes." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "" +"Proporcione un texto alternativo para la imagen en aras de la accesibilidad" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Texto alternativo de la imagen" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Cargar el archivo de imagen para este producto" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Imagen del producto" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Determina el orden de visualización de las imágenes" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Prioridad de visualización" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "El producto que representa esta imagen" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Imágenes de productos" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"Representa una campaña promocional para productos con descuento. Esta clase " +"se utiliza para definir y gestionar campañas promocionales que ofrecen un " +"descuento porcentual para los productos. La clase incluye atributos para " +"establecer el porcentaje de descuento, proporcionar detalles sobre la " +"promoción y vincularla a los productos aplicables. Se integra con el " +"catálogo de productos para determinar los artículos afectados en la campaña." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Porcentaje de descuento para los productos seleccionados" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Porcentaje de descuento" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Proporcione un nombre único para esta promoción" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Nombre de la promoción" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Descripción de la promoción" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Seleccione los productos incluidos en esta promoción" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Productos incluidos" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promoción" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Representa la lista de deseos de un usuario para almacenar y gestionar los " +"productos deseados. La clase proporciona funcionalidad para gestionar una " +"colección de productos, soportando operaciones como añadir y eliminar " +"productos, así como soportar operaciones para añadir y eliminar múltiples " +"productos a la vez." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Productos que el usuario ha marcado como deseados" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Usuario propietario de esta lista de deseos" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Propietario de Wishlist" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Lista de deseos" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"Representa un registro documental vinculado a un producto. Esta clase se " +"utiliza para almacenar información sobre documentales relacionados con " +"productos específicos, incluidas las cargas de archivos y sus metadatos. " +"Contiene métodos y propiedades para gestionar el tipo de archivo y la ruta " +"de almacenamiento de los archivos documentales. Amplía la funcionalidad de " +"mixins específicos y proporciona características personalizadas adicionales." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documental" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentaries" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"Representa una entidad de dirección que incluye detalles de ubicación y " +"asociaciones con un usuario. Proporciona funcionalidad para el " +"almacenamiento de datos geográficos y de direcciones, así como integración " +"con servicios de geocodificación. Esta clase está diseñada para almacenar " +"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 " +"manejo personalizado de los datos." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Dirección del cliente" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Dirección" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Calle" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Distrito" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Ciudad" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Región" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Promo code" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "País" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolocalización Punto(Longitud, Latitud)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Respuesta JSON completa del geocodificador para esta dirección" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Respuesta JSON almacenada del servicio de geocodificación" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Dirección" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Direcciones" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Representa un código promocional que puede ser utilizado para descuentos, " +"gestionando su validez, tipo de descuento y aplicación. La clase PromoCode " +"almacena detalles sobre un código promocional, incluyendo su identificador " +"único, propiedades de descuento (importe o porcentaje), periodo de validez, " +"usuario asociado (si lo hay) y estado de su uso. Incluye funcionalidades " +"para validar y aplicar el código promocional a un pedido garantizando el " +"cumplimiento de las restricciones." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Código único utilizado por un usuario para canjear un descuento" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Promo code identifier" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Se aplica un descuento fijo si no se utiliza el porcentaje" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Importe fijo del descuento" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Porcentaje de descuento aplicado si no se utiliza el importe fijo" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Porcentaje de descuento" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Fecha de caducidad del promocode" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Hora de fin de validez" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Fecha a partir de la cual es válido este promocode" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Hora de inicio de validez" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Fecha en la que se utilizó el promocode, en blanco si aún no se ha utilizado" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Marca de tiempo de uso" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Usuario asignado a este promocode si procede" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Usuario asignado" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Promo code" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Promo codes" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " +"ambos ni ninguno." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "El código promocional ya ha sido utilizado" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "¡Tipo de descuento no válido para el código promocional {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Representa un pedido realizado por un usuario. Esta clase modela un pedido " +"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." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "La dirección de facturación utilizada para este pedido" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Código promocional opcional aplicado a este pedido" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Código promocional aplicado" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "La dirección de envío utilizada para este pedido" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Dirección de envío" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Estado actual del pedido en su ciclo de vida" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Estado del pedido" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Estructura JSON de las notificaciones para mostrar a los usuarios, en la " +"interfaz de administración se utiliza la vista de tabla." + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Representación JSON de los atributos de la orden para esta orden" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "El usuario que realizó el pedido" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Usuario" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Fecha de finalización de la orden" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Comprar tiempo" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Un identificador legible por el ser humano para la orden" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "ID legible por humanos" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Pida" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Un usuario sólo puede tener una orden pendiente a la vez." + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "No puede añadir productos a un pedido que no esté pendiente" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "No se pueden añadir productos inactivos al pedido" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "No puede añadir más productos de los disponibles en stock" + +#: 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 "No puede eliminar productos de un pedido que no esté pendiente" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} ¡no existe con la consulta <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promocode no existe" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Sólo puede comprar productos físicos con la dirección de envío especificada." + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "La dirección no existe" + +#: 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 "" +"No puede comprar en este momento, por favor inténtelo de nuevo en unos " +"minutos." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Valor de fuerza no válido" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "No se puede comprar un pedido vacío." + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "No se puede comprar un pedido sin un usuario." + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "¡Un usuario sin saldo no puede comprar con saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Fondos insuficientes para completar el pedido" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"no puede comprar sin registrarse, facilite la siguiente información: nombre " +"del cliente, correo electrónico del cliente, número de teléfono del cliente" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Forma de pago no válida: ¡{payment_method} de {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gestiona los comentarios de los usuarios sobre los productos. Esta clase " +"está diseñada para capturar y almacenar los comentarios de los usuarios " +"sobre productos específicos que han comprado. Contiene atributos para " +"almacenar los comentarios de los usuarios, una referencia al producto " +"relacionado en el pedido y una calificación asignada por el usuario. La " +"clase utiliza campos de base de datos para modelar y gestionar eficazmente " +"los datos de los comentarios." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Comentarios de los usuarios sobre su experiencia con el producto" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "Comentarios" + +#: engine/core/models.py:1719 +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" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Producto relacionado con el pedido" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Valoración del producto asignada por el usuario" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Valoración del producto" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Representa los productos asociados a los pedidos y sus atributos. El modelo " +"OrderProduct mantiene información sobre un producto que forma parte de un " +"pedido, incluyendo detalles como el precio de compra, la cantidad, los " +"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 " +"productos digitales. El modelo se integra con los modelos Pedido y Producto " +"y almacena una referencia a ellos." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" +"El precio pagado por el cliente por este producto en el momento de la compra" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Precio de compra en el momento del pedido" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" +"Comentarios internos para los administradores sobre este producto solicitado" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Comentarios internos" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Notificaciones a los usuarios" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Representación JSON de los atributos de este elemento" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Atributos ordenados del producto" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Referencia al pedido principal que contiene este producto" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Orden de los padres" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "El producto específico asociado a esta línea de pedido" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Cantidad de este producto específico en el pedido" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Cantidad de productos" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Estado actual de este producto en el pedido" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Estado de la línea de productos" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "El pedido-producto debe tener un pedido asociado." + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "no se puede comentar un pedido no recibido" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Nombre" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL de la integración" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Credenciales de autenticación" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Sólo puede tener un proveedor de CRM por defecto" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRMs" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Enlace CRM del pedido" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Enlaces CRM de los pedidos" + +#: engine/core/models.py:1947 +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." +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 " +"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." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Descargar" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Descargas" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"debe proporcionar un comentario, una valoración y el uuid del producto " +"solicitado para añadir comentarios." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Inicio" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Contacte con nosotros" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Quiénes somos" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Mezcla de clientes (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nuevos clientes" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Clientes habituales" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Sin actividad de clientes en los últimos 30 días." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Ventas diarias" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Pedidos (FINALIZADOS)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Ingresos brutos" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Pedidos" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Cuadro de mandos" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Resumen de ingresos" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Ingresos netos" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Impuestos" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Devuelve" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Ingresos brutos" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Sin fecha" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Ingresos netos" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Tasa de devolución" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Devuelto" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Pocas existencias" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "No hay artículos de bajo stock." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Productos más devueltos (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Sin devoluciones en los últimos 30 días." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Producto más deseado" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Aún no hay datos." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Producto más popular" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Enlaces rápidos" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "No hay enlaces disponibles." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Enviado vs Digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Enviado" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Principales categorías por cantidad (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Ninguna venta de categoría en los últimos 30 días." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrador del sitio Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Confirmación de pedido" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logotipo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hola %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"¡Gracias por su pedido #%(order.pk)s! Nos complace informarle de que hemos " +"recibido su pedido. A continuación encontrará los detalles de su pedido:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Total" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Precio total" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro " +"servicio de asistencia en %(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Saludos cordiales,
el equipo %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Todos los derechos reservados" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Pedido entregado" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hola %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"¡Hemos procesado correctamente su pedido №%(order_uuid)s! A continuación " +"encontrará los detalles de su pedido:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"información adicional\n" +" información adicional" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Valor" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +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 %(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Saludos cordiales,
el equipo %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Clave" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Añadir fila" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promocode concedido" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"¡Gracias por quedarte con nosotros! Le hemos concedido un promocode\n" +" para" + +#: 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" +" the details of your order:" +msgstr "" +"Gracias por su pedido. Nos complace confirmarle su compra. A continuación " +"encontrará los detalles de su pedido:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Precio del envío" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Su pedido se entregará en la siguiente dirección:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Saludos cordiales,
El equipo %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"todos los derechos\n" +" reservados" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Tanto los datos como el tiempo de espera son necesarios" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" +"Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos." + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contacto iniciado" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmación de pedido" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | pedido entregado" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "No tiene permiso para realizar esta acción." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "El parámetro NOMINATIM_URL debe estar configurado." + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" +"Las dimensiones de la imagen no deben superar w{max_width} x h{max_height} " +"píxeles." + +#: engine/core/views.py:91 +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 " +"contenido apropiado para XML." + +#: engine/core/views.py:106 +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 "" +"Gestiona la respuesta de la vista detallada de un mapa del sitio. Esta " +"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:141 +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:173 +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:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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:219 +msgid "Handles `contact us` form submissions." +msgstr "Gestiona los formularios de contacto." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gestiona las solicitudes de procesamiento y validación de URL de las " +"solicitudes POST entrantes." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Gestiona las consultas de búsqueda global." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid es obligatorio" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "pedir producto no existe" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Sólo puede descargar el activo digital una vez" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "El producto del pedido no tiene un producto" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon no encontrado" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"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." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Devuelve la versión actual del eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Ingresos y pedidos (últimos %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Define un conjunto de vistas para gestionar operaciones relacionadas con " +"Evibes. La clase EvibesViewSet hereda de ModelViewSet y proporciona " +"funcionalidad para manejar acciones y operaciones sobre entidades Evibes. " +"Incluye soporte para clases serializadoras dinámicas basadas en la acción " +"actual, permisos personalizables y formatos de representación." + +#: 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." +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 " +"solicitudes y respuestas de los datos de AttributeGroup." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +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 " +"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: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." +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 " +"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:213 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +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." + +#: 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 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." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +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." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Representa un conjunto de vistas para gestionar objetos de vendedor. Este " +"conjunto de vistas permite obtener, filtrar y serializar datos de vendedor. " +"Define las clases queryset, filter configurations y serializer utilizadas " +"para gestionar las diferentes acciones. El propósito de esta clase es " +"proporcionar un acceso simplificado a los recursos relacionados con el " +"vendedor a través del marco REST de Django." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"Representación de un conjunto de vistas que maneja objetos Feedback. Esta " +"clase gestiona las operaciones relacionadas con los objetos Feedback, " +"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." + +#: 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 " +"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." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"Proporciona un conjunto de vistas para gestionar entidades OrderProduct. " +"Este conjunto de vistas permite operaciones CRUD y acciones personalizadas " +"específicas del modelo OrderProduct. Incluye filtrado, comprobación de " +"permisos y cambio de serializador en función de la acción solicitada. " +"Además, proporciona una acción detallada para gestionar los comentarios " +"sobre las instancias de OrderProduct." + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +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:914 +msgid "Represents a view set for managing promotions. " +msgstr "Representa un conjunto de vistas para gestionar promociones." + +#: 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: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 " +"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 para gestionar las operaciones de la lista de deseos. " +"WishlistViewSet proporciona puntos finales para interactuar con la lista de " +"deseos de un usuario, permitiendo la recuperación, modificación y " +"personalización de productos dentro de la lista de deseos. Este ViewSet " +"facilita funcionalidades como la adición, eliminación y acciones masivas " +"para los productos de la lista de deseos. Los controles de permisos están " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Error de geocodificación: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Maneja las operaciones relacionadas con las Etiquetas de Producto dentro de " +"la aplicación. Esta clase proporciona funcionalidad para recuperar, filtrar " +"y serializar objetos de etiquetas de producto. Admite el filtrado flexible " +"de atributos específicos mediante el backend de filtrado especificado y " +"utiliza dinámicamente diferentes serializadores en función de la acción que " +"se esté realizando." diff --git a/engine/core/locale/fa_IR/LC_MESSAGES/django.mo b/engine/core/locale/fa_IR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..6c5906d1 Binary files /dev/null and b/engine/core/locale/fa_IR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/fa_IR/LC_MESSAGES/django.po b/engine/core/locale/fa_IR/LC_MESSAGES/django.po new file mode 100644 index 00000000..7faa342c --- /dev/null +++ b/engine/core/locale/fa_IR/LC_MESSAGES/django.po @@ -0,0 +1,3138 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "" + +#: engine/core/abstract.py:21 +msgid "" +"if set to false, this object can't be seen by users without needed permission" +msgstr "" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "" + +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +msgid "failed" +msgstr "" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "" + +#: engine/core/docs/drf/views.py:33 +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 "" + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "" + +#: engine/core/docs/drf/views.py:46 +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" +msgstr "" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "" + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:89 +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 "" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:179 +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 "" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:430 +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" + +#: 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" +"• **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" +"`b64-description=icontains-aGVhdC1jb2xk`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"Comma-separated list of fields to sort by. Prefix with `-` for " +"descending. \n" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "" + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "" + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "" + +#: 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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "" + +#: engine/core/graphene/mutations.py:576 +#, python-brace-format +msgid "order product {order_product_uuid} not found" +msgstr "" + +#: engine/core/graphene/mutations.py:582 +msgid "original address string provided by the user" +msgstr "" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "" + +#: 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:95 +msgid "grouped attributes" +msgstr "" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "" + +#: 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:205 +msgid "tags for this category" +msgstr "" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "" + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "" + +#: 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:414 +msgid "total price of this order" +msgstr "" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "" + +#: 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:665 +msgid "tagged categories" +msgstr "" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "" + +#: 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:681 +msgid "email host user" +msgstr "" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "" + +#: 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 +msgid "products search results" +msgstr "" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "" + +#: engine/core/models.py:229 +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 "" + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "" + +#: engine/core/models.py:438 +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." +msgstr "" + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "" + +#: engine/core/models.py:739 +msgid "string" +msgstr "" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "" + +#: engine/core/models.py:741 +msgid "float" +msgstr "" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "" + +#: engine/core/models.py:743 +msgid "array" +msgstr "" + +#: engine/core/models.py:744 +msgid "object" +msgstr "" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "" + +#: engine/core/models.py:1150 +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" +msgstr "" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "" + +#: 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 "" + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "" + +#: engine/core/models.py:1575 +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 "" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "" + +#: engine/core/models.py:1719 +msgid "references the specific product in an order that this feedback is about" +msgstr "" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "" + +#: engine/core/models.py:1947 +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." +msgstr "" + +#: engine/core/models.py:1961 +msgid "download" +msgstr "" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +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" +" the details of your order:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "" + +#: engine/core/utils/messages.py:3 +msgid "you do not have permission to perform this action." +msgstr "" + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "" + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: engine/core/views.py:332 +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." +msgstr "" + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "" + +#: engine/core/views.py:404 +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." +msgstr "" + +#: engine/core/views.py:416 +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:429 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "" + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: 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 "" + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: 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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.mo b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..3d4842a2 Binary files /dev/null and b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.po b/engine/core/locale/fr_FR/LC_MESSAGES/django.po new file mode 100644 index 00000000..0cdc09ce --- /dev/null +++ b/engine/core/locale/fr_FR/LC_MESSAGES/django.po @@ -0,0 +1,3577 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: fr-fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Unique ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"L'identifiant unique est utilisé pour identifier de manière sûre tout objet " +"de la base de données." + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Est actif" + +#: engine/core/abstract.py:21 +msgid "" +"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." + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Créée" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Date de la première apparition de l'objet dans la base de données" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modifié" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Date de la dernière modification de l'objet" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Traductions" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Général" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relations" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "Informations complémentaires" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Métadonnées" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Horodatage" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Les articles sélectionnés ont été activés !" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Les articles sélectionnés ont été désactivés !" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Valeurs des attributs" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Image" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Images" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stock" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Stocks" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Commander un produit" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Les enfants" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Config" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Cœur de métier" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Fini" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Délivrer" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Livré" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Annulé" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Échec" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "En attente" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Accepté" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Argent restitué" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Paiement" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Réussite" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Schéma OpenAPI dans le format et la langue sélectionnés" + +#: engine/core/docs/drf/views.py:33 +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 "" +"Schéma OpenApi3 pour cette API. Le format peut être sélectionné via la " +"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:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Obtenir la liste des langues prises en charge" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Obtenir les paramètres exposables de l'application" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Demander une URL CORSée. Seul https est autorisé." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Recherche entre produits, catégories et marques" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Point d'arrivée de la recherche globale pour interroger les tables du projet" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Acheter une commande en tant qu'entreprise" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Acheter une commande en tant qu'entreprise, en utilisant les `produits` " +"fournis avec `product_uuid` et `attributs`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "" +"télécharger un bien numérique à partir d'une commande numérique achetée" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Liste de tous les groupes d'attributs (vue simple)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Récupérer un seul groupe d'attributs (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Créer un groupe d'attributs" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Supprimer un groupe d'attributs" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Réécrire un groupe d'attributs existant en sauvegardant les éléments non " +"modifiables" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Liste de tous les attributs (vue simple)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Récupérer un seul attribut (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Créer un attribut" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Supprimer un attribut" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Réécrire un attribut existant en sauvegardant les éléments non modifiables" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Liste de toutes les valeurs d'attributs (vue simple)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Récupérer une seule valeur d'attribut (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Créer une valeur d'attribut" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Supprimer une valeur d'attribut" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Réécrire une valeur d'attribut existante en sauvegardant les éléments non " +"modifiables" + +#: engine/core/docs/drf/viewsets.py:186 +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" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Liste de toutes les catégories (vue simple)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Récupérer une seule catégorie (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Catégorie UUID ou slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Créer une catégorie" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Supprimer une catégorie" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables" + +#: 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 "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "Méta snapshot SEO" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Renvoie un instantané des métadonnées SEO de la catégorie." + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Liste de toutes les catégories (vue simple)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Pour les utilisateurs non fonctionnaires, seules leurs propres commandes " +"sont renvoyées." + +#: 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" +msgstr "" +"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" +msgstr "Filtrer les commandes dont l'heure d'achat est >= cette date ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrer les commandes avec buy_time <= this ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtre sur l'UUID exact de l'ordre" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtre sur l'identifiant exact de la commande, lisible par l'homme" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filtre sur l'adresse électronique de l'utilisateur (correspondance exacte " +"insensible à la casse)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrer par UUID de l'utilisateur" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filtre sur l'état de la commande (correspondance insensible aux majuscules " +"et aux minuscules)" + +#: 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')." +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')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Récupérer une seule catégorie (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "UUID de la commande ou identifiant lisible par l'homme" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Créer un attribut" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Supprimer un attribut" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Prix d'achat au moment de la commande" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"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 +msgid "retrieve current pending order of a user" +msgstr "récupérer la commande en cours d'un utilisateur" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "acheter une commande sans créer de compte" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finalise l'achat d'une commande pour un utilisateur non enregistré." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Ajouter un produit à la commande" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Ajoute un produit à une commande en utilisant le `product_uuid` et les " +"`attributs` fournis." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" +"Ajouter une liste de produits à la commande, les quantités ne seront pas " +"prises en compte" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Ajoute une liste de produits à une commande en utilisant le `product_uuid` " +"et les `attributs` fournis." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Supprimer un produit de la commande" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Supprime un produit d'une commande en utilisant le `product_uuid` et les " +"`attributs` fournis." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" +"Retirer un produit de la commande, les quantités ne seront pas prises en " +"compte" + +#: engine/core/docs/drf/viewsets.py:448 +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." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Liste de tous les attributs (vue simple)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Pour les utilisateurs non fonctionnaires, seules leurs propres listes de " +"souhaits sont renvoyées." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Récupérer un seul attribut (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Créer un attribut" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Supprimer un attribut" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Réécrire un attribut existant en sauvegardant les éléments non modifiables" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "récupérer la liste de souhaits en cours d'un utilisateur" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"récupération d'une liste de vœux en attente d'un utilisateur authentifié" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Ajouter un produit à la commande" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Ajoute un produit à une liste de souhaits en utilisant le `product_uuid` " +"fourni" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Supprimer un produit de la liste de souhaits" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Supprime un produit d'une liste de souhaits en utilisant l'identifiant " +"`product_uuid` fourni." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Ajouter plusieurs produits à la liste de souhaits" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Ajoute plusieurs produits à une liste de souhaits en utilisant les " +"`product_uuids` fournis" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Supprimer un produit de la commande" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Supprime plusieurs produits d'une liste de souhaits en utilisant les " +"`product_uuids` fournis" + +#: 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" +"• **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" +"`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" +"Exemples : \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 +msgid "list all products (simple view)" +msgstr "Liste de tous les produits (vue simple)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" +"**Allowed:** 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)" +msgstr "Récupérer un seul produit (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Réécrire un produit existant en préservant les champs non modifiables" + +#: 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 "" +"Mettre à jour certains champs d'un produit existant, en préservant les " +"champs non modifiables" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Supprimer un produit" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "liste tous les commentaires autorisés pour un produit" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Renvoie un instantané des métadonnées SEO du produit" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Liste de toutes les adresses" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Récupérer une seule adresse" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Créer une nouvelle adresse" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Supprimer une adresse" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Mise à jour d'une adresse entière" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Mise à jour partielle d'une adresse" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Saisie automatique des adresses" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Chaîne de requête de données brutes, à compléter avec les données du point " +"d'extrémité géo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "limite la quantité de résultats, 1 < limite < 10, par défaut : 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "liste de tous les commentaires (vue simple)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "récupérer un seul retour d'information (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "créer un retour d'information" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "supprimer un feedback" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" +"réécrire un feedback existant en sauvegardant les éléments non modifiables" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "lister toutes les relations commande-produit (vue simple)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "récupérer une seule relation commande-produit (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "créer une nouvelle relation commande-produit" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "remplacer une relation commande-produit existante" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "mettre à jour partiellement une relation commande-produit existante" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "supprimer une relation commande-produit" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "" +"ajouter ou supprimer un retour d'information sur une relation commande-" +"produit" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Liste de toutes les marques (vue simple)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Récupérer une seule marque (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID ou slug de la marque" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Créer une marque" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Supprimer une marque" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Réécrire une marque existante en sauvegardant les non-éditables" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Liste de tous les fournisseurs (vue simple)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Récupérer un seul fournisseur (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Créer un fournisseur" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Supprimer un fournisseur" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" +"Réécrire un vendeur existant en sauvegardant les éléments non modifiables" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Liste de toutes les images de produits (vue simple)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Récupérer l'image d'un seul produit (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Créer une image du produit" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Supprimer une image de produit" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Réécrire l'image d'un produit existant en sauvegardant les éléments non " +"modifiables" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Liste de tous les codes promo (vue simple)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Récupérer un seul code promo (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Créer un code promo" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Supprimer un code promo" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Réécrire un code promo existant en sauvegardant les non-éditables" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Liste de toutes les promotions (vue simple)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Récupérer une seule promotion (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Créer une promotion" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +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" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Liste de toutes les actions (vue simple)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Récupérer une seule action (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Créer une fiche de stock" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Supprimer une fiche de stock" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Réécrire une fiche de stock existante en sauvegardant les éléments non " +"modifiables" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Liste de toutes les étiquettes de produits (vue simple)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Récupérer une seule étiquette de produit (vue détaillée)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Créer une étiquette de produit" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +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" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Réécrire certains champs d'une catégorie existante en sauvegardant les non-" +"éditables" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Aucun terme de recherche n'est fourni." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Recherche" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Nom" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Catégories" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Catégories Limaces" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tags" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Prix minimum" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Prix maximum" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Est actif" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Marque" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Attributs" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Quantité" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Limace" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Is Digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Inclure des sous-catégories" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Inclure les produits commandés par les particuliers" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Il doit y avoir un category_uuid pour utiliser le drapeau " +"include_subcategories" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Recherche (ID, nom du produit ou numéro de pièce)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Acheté après (inclus)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Acheté avant (inclus)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Courriel de l'utilisateur" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID de l'utilisateur" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Statut" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "ID lisible par l'homme" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Parent" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Catégorie entière (avec au moins 1 produit ou non)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Niveau" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID du produit" + +#: 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:41 +msgid "data to store in cache" +msgstr "Données à stocker dans la mémoire cache" + +#: 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:47 +msgid "cached data" +msgstr "Données mises en cache" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Ajouter un produit à la commande" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Supprimer tous les produits de la commande" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Acheter une commande" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Supprimer/Ajouter" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Veuillez indiquer la valeur de `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Ajouter un produit à la commande" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Supprimer un produit de la commande" + +#: 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:510 +msgid "buy a product" +msgstr "Acheter une commande" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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: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:573 +msgid "action must be either `add` or `remove`" +msgstr "L'action doit être soit `add` soit `remove` !" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Chaîne d'adresse originale fournie par l'utilisateur" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} n'existe pas : {uuid} !" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - fonctionne comme un charme" + +#: 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:95 +msgid "grouped attributes" +msgstr "Attributs groupés" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Groupes d'attributs" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Marques" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Catégories" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Tags pour cette catégorie" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produits dans cette catégorie" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Vendeurs" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitude (coordonnée Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitude (coordonnée X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Comment" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Représente le retour d'information d'un utilisateur." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Retour d'information" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Adresse de facturation" + +#: 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" + +#: 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:415 +msgid "total quantity of products in order" +msgstr "Quantité totale de produits dans la commande" + +#: 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:419 +msgid "transactions for this order" +msgstr "Transactions pour cette commande" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Commandes" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Image URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Images du produit" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Retour d'information" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Groupes d'attributs" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Prix" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Quantité" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Nombre de retours d'information" + +#: 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:484 +msgid "discount price" +msgstr "Prix d'escompte" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produits" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promocodes" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produits en vente" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promotions" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Vendeur" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produit" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Liste de souhaits" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Produits marqués" + +#: 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:665 +msgid "tagged categories" +msgstr "Catégories marquées" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Tags des catégories" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Nom du projet" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Nom de l'entreprise" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Adresse de l'entreprise" + +#: 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: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:681 +msgid "email host user" +msgstr "Utilisateur de l'hôte de messagerie" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Montant maximum du paiement" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Montant minimum pour le paiement" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Données analytiques" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Advertisement data" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configuration" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Code langue" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Nom de la langue" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Drapeau linguistique, s'il existe :)" + +#: 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 +msgid "products search results" +msgstr "Résultats de la recherche de produits" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Résultats de la recherche de produits" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Représente un groupe d'attributs, qui peut être hiérarchique. Cette classe " +"est utilisée pour gérer et organiser les groupes d'attributs. Un groupe " +"d'attributs peut avoir un groupe parent, formant ainsi une structure " +"hiérarchique. Cela peut être utile pour catégoriser et gérer les attributs " +"plus efficacement dans un système complexe." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Parent de ce groupe" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Groupe d'attributs parent" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Nom du groupe d'attributs" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Groupe d'attributs" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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 " +"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 " +"permet de l'utiliser dans des systèmes qui interagissent avec des vendeurs " +"tiers." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Stocke les informations d'identification et les points d'extrémité " +"nécessaires à la communication avec l'API du fournisseur." + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Informations sur l'authentification" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" +"Définir la majoration pour les produits récupérés auprès de ce fournisseur" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Pourcentage de marge du vendeur" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Nom de ce vendeur" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Nom du vendeur" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "dossier de réponse" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "la dernière réponse du vendeur en matière de traitement" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Chemin d'accès au fichier d'intégration du fournisseur" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Parcours d'intégration" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Représente une étiquette de produit utilisée pour classer ou identifier des " +"produits. La classe ProductTag est conçue pour identifier et classer les " +"produits de manière unique en combinant un identifiant interne et un nom " +"d'affichage convivial. Elle prend en charge les opérations exportées par le " +"biais de mixins et permet de personnaliser les métadonnées à des fins " +"administratives." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Identifiant interne de l'étiquette du produit" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Nom du jour" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Nom convivial pour l'étiquette du produit" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Nom d'affichage de l'étiquette" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Étiquette du produit" + +#: engine/core/models.py:229 +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 "" +"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." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "étiquette de catégorie" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "balises de catégorie" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Représente une entité catégorie permettant d'organiser et de regrouper des " +"éléments connexes dans une structure hiérarchique. Les catégories peuvent " +"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 " +"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 " +"balises ou une priorité." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Télécharger une image représentant cette catégorie" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Image de catégorie" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" +"Définir un pourcentage de majoration pour les produits de cette catégorie" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Parent de cette catégorie pour former une structure hiérarchique" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Catégorie de parents" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Nom de la catégorie" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Donnez un nom à cette catégorie" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Ajouter une description détaillée pour cette catégorie" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Description de la catégorie" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Priorité" + +#: engine/core/models.py:438 +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." +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." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Nom de cette marque" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Nom de marque" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Télécharger un logo représentant cette marque" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Petite image de marque" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Télécharger un grand logo représentant cette marque" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Une grande image de marque" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Ajouter une description détaillée de la marque" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Description de la marque" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Catégories facultatives auxquelles cette marque est associée" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Représente le stock d'un produit géré dans le système. Cette classe fournit " +"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." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Le vendeur qui fournit ce stock de produits" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Vendeur associé" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Prix final pour le client après majoration" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Prix de vente" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Le produit associé à cette entrée de stock" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Produit associé" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Le prix payé au vendeur pour ce produit" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Prix d'achat du vendeur" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Quantité disponible du produit en stock" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Quantité en stock" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU attribué par le fournisseur pour identifier le produit" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "UGS du vendeur" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Fichier numérique associé à ce stock, le cas échéant" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Fichier numérique" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Attributs du système" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Entrées de stock" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +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 é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 " +"des modèles connexes (tels que Category, Brand et ProductTag) et gère la " +"mise en cache des propriétés fréquemment consultées afin d'améliorer les " +"performances. Elle est utilisée pour définir et manipuler les données " +"produit et les informations associées dans une application." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Catégorie à laquelle appartient ce produit" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Possibilité d'associer ce produit à une marque" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Indique si ce produit est livré numériquement" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Le produit est-il numérique ?" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Fournir un nom d'identification clair pour le produit" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Nom du produit" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Ajouter une description détaillée du produit" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Description du produit" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Numéro de pièce pour ce produit" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Numéro de pièce" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Unité de gestion des stocks pour ce produit" + +#: engine/core/models.py:720 +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 " +"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 " +"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." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Groupe de cet attribut" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Chaîne" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Entier" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Flotteur" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Booléen" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Tableau" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objet" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Type de la valeur de l'attribut" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Type de valeur" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Nom de cet attribut" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Nom de l'attribut" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "est filtrable" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Quels attributs et valeurs peuvent être utilisés pour filtrer cette " +"catégorie." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attribut de cette valeur" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Le produit spécifique associé à la valeur de cet attribut" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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 " +"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 " +"pour les images." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Fournir un texte alternatif pour l'image afin d'en faciliter l'accès" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Texte alt de l'image" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Télécharger le fichier image pour ce produit" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Image du produit" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Détermine l'ordre d'affichage des images" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Priorité à l'affichage" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Le produit que cette image représente" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Images du produit" + +#: engine/core/models.py:868 +msgid "" +"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." +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 " +"promotionnelles qui offrent une remise en pourcentage sur les produits. La " +"classe comprend des attributs permettant de définir le taux de remise, de " +"fournir des détails sur la promotion et de la lier aux produits concernés. " +"Elle s'intègre au catalogue de produits pour déterminer les articles " +"concernés par la campagne." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Pourcentage de réduction pour les produits sélectionnés" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Pourcentage de réduction" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Donnez un nom unique à cette promotion" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Nom de la promotion" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Promotion description" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Sélectionnez les produits inclus dans cette promotion" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Produits inclus" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promotion" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Représente la liste de souhaits d'un utilisateur pour le stockage et la " +"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." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produits que l'utilisateur a marqués comme souhaités" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Utilisateur qui possède cette liste de souhaits" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Propriétaire de la liste de souhaits" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Liste de souhaits" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"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 " +"documentaires. Elle étend les fonctionnalités de mixins spécifiques et " +"fournit des fonctionnalités personnalisées supplémentaires." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documentaire" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentaires" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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 " +"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 " +"adresse à un utilisateur, ce qui facilite le traitement personnalisé des " +"données." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Ligne d'adresse du client" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Ligne d'adresse" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Rue" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "District" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Ville" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Région" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Code postal" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Pays" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Point de géolocalisation (longitude, latitude)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Réponse JSON complète du géocodeur pour cette adresse" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Réponse JSON stockée du service de géocodage" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adresse" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresses" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +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 " +"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 " +"les contraintes soient respectées." + +#: 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" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +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é" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +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é" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Pourcentage de réduction" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Date d'expiration du code promotionnel" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Heure de fin de validité" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Date à partir de laquelle ce code promotionnel est valable" + +#: engine/core/models.py:1115 +msgid "start validity time" +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é." + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Horodatage de l'utilisation" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Utilisateur assigné à ce code promo, le cas échéant" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Utilisateur assigné" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Code promo" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Codes promotionnels" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Un seul type de remise doit être défini (montant ou pourcentage), mais pas " +"les deux ni aucun des deux." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Le code promotionnel a déjà été utilisé" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Type de réduction non valide pour le code promo {self.uuid} !" + +#: engine/core/models.py:1196 +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 " +"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 " +"produits dans le cycle de vie de la commande." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "L'adresse de facturation utilisée pour cette commande" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Code promo optionnel appliqué à cette commande" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Code promo appliqué" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "L'adresse de livraison utilisée pour cette commande" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Adresse de livraison" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Statut actuel de la commande dans son cycle de vie" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Statut de la commande" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Structure JSON des notifications à afficher aux utilisateurs ; dans " +"l'interface d'administration, la vue en tableau est utilisée." + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Représentation JSON des attributs de cette commande" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "L'utilisateur qui a passé la commande" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Utilisateur" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "L'heure à laquelle la commande a été finalisée." + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Temps d'achat" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Un identifiant lisible par l'homme pour la commande" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "ID lisible par l'homme" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Commande" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Un utilisateur ne peut avoir qu'un seul ordre en cours à la fois !" + +#: 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." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "" +"Vous ne pouvez pas ajouter plus de produits que ceux disponibles en stock" + +#: 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 "" +"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " +"cours." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} n'existe pas avec la requête <{query}> !" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Le code promotionnel n'existe pas" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Vous ne pouvez acheter que des produits physiques dont l'adresse de " +"livraison est spécifiée !" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "L'adresse n'existe pas" + +#: 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 "" +"Vous ne pouvez pas acheter en ce moment, veuillez réessayer dans quelques " +"minutes." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Valeur de force non valide" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Vous ne pouvez pas acheter une commande vide !" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" +"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " +"cours." + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Un utilisateur sans solde ne peut pas acheter avec un solde !" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Insuffisance de fonds pour compléter la commande" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"vous ne pouvez pas acheter sans vous inscrire, veuillez fournir les " +"informations suivantes : nom du client, courriel du client, numéro de " +"téléphone du client" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Méthode de paiement non valide : {payment_method} de " +"{available_payment_methods} !" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gère les commentaires des utilisateurs sur les produits. Cette classe est " +"conçue pour capturer et stocker les commentaires des utilisateurs sur des " +"produits spécifiques qu'ils ont achetés. Elle contient des attributs " +"permettant de stocker les commentaires des utilisateurs, une référence au " +"produit concerné dans la commande et une note attribuée par l'utilisateur. " +"La classe utilise des champs de base de données pour modéliser et gérer " +"efficacement les données de feedback." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Commentaires des utilisateurs sur leur expérience du produit" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "Commentaires" + +#: engine/core/models.py:1719 +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." + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Produit de commande apparenté" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Note attribuée par l'utilisateur au produit" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Evaluation du produit" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +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." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Le prix payé par le client pour ce produit au moment de l'achat" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +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é" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Commentaires internes" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Notifications aux utilisateurs" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Représentation JSON des attributs de cet élément" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Attributs du produit ordonnés" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Référence à l'ordre parent qui contient ce produit" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Ordonnance parentale" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Le produit spécifique associé à cette ligne de commande" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Quantité de ce produit spécifique dans la commande" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Quantité de produits" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Statut actuel de ce produit dans la commande" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Statut de la ligne de produits" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Le produit doit être associé à une commande !" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Mauvaise action spécifiée pour le retour d'information : {action} !" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" +"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " +"cours." + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Nom" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL de l'intégration" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Références d'authentification" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Vous ne pouvez avoir qu'un seul fournisseur de CRM par défaut" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Lien CRM de la commande" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Liens CRM des commandes" + +#: engine/core/models.py:1947 +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." +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 " +"d'accéder aux téléchargements liés aux produits de la commande. Elle " +"conserve des informations sur le produit de commande associé, le nombre de " +"téléchargements et la visibilité publique de l'actif. Elle comprend une " +"méthode permettant de générer une URL pour le téléchargement de l'actif " +"lorsque la commande associée est terminée." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Télécharger" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Téléchargements" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"vous devez fournir un commentaire, une note et l'uuid du produit commandé " +"pour ajouter un commentaire." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Accueil" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Nous contacter" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "À propos de nous" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Mélange de clients (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nouveaux clients" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Clients fidèles" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Pas d'activité client au cours des 30 derniers jours." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Ventes quotidiennes" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Commandes (FINIES)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Recettes brutes" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Commandes" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brut" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Tableau de bord" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Aperçu des revenus" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Net revenue" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Impôts" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Retours" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Recettes brutes" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Pas de date" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Net revenue" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Taux de remboursement" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Renvoyé" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Faible stock" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Pas d'articles en rupture de stock." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Produits les plus retournés (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Aucun retour dans les 30 derniers jours." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Produit le plus souhaité" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Pas encore de données." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Produit le plus populaire" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Liens rapides" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Aucun lien n'est disponible." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Expédiés ou numériques (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Numérique" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Expédié" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Principales catégories par quantité (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Aucune vente par catégorie au cours des 30 derniers jours." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrateur de site Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Confirmation de commande" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Bonjour %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Merci pour votre commande #%(order.pk)s ! Nous avons le plaisir de vous " +"informer que nous avons pris en compte votre commande. Vous trouverez ci-" +"dessous les détails de votre commande :" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Total" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Prix total" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Si vous avez des questions, n'hésitez pas à contacter notre support à " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Meilleures salutations,
l'équipe %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Tous droits réservés" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Commande livrée" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Bonjour %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Nous avons traité avec succès votre commande №%(order_uuid)s ! Vous " +"trouverez ci-dessous les détails de votre commande :" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"informations\n" +" complémentaires" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Valeur" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +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 à %(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Meilleures salutations,
l'équipe %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Clé" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Ajouter une rangée" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promocode granted" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Merci de rester avec nous ! Nous vous avons accordé un code promo\n" +" pour" + +#: 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" +" the details of your order:" +msgstr "" +"Nous vous remercions pour votre commande ! Nous avons le plaisir de " +"confirmer votre achat. Vous trouverez ci-dessous les détails de votre " +"commande :" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Prix d'expédition" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Votre commande sera livrée à l'adresse suivante :" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Meilleures salutations,
L'équipe %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"tous les droits\n" +" réservés" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +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." + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | nous contacter initié" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmation de commande" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | commande livrée" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Vous n'êtes pas autorisé à effectuer cette action." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Le paramètre NOMINATIM_URL doit être configuré !" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" +"Les dimensions de l'image ne doivent pas dépasser w{max_width} x " +"h{max_height} pixels." + +#: engine/core/views.py:91 +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 "" +"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:106 +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 "" +"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." + +#: engine/core/views.py:141 +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:173 +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:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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:219 +msgid "Handles `contact us` form submissions." +msgstr "Gère les soumissions du formulaire `contact us`." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gère les demandes de traitement et de validation des URL à partir des " +"requêtes POST entrantes." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Traite les demandes de recherche globales." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid est obligatoire" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "le produit de la commande n'existe pas" + +#: engine/core/views.py:353 +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:356 +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:362 +msgid "the order product does not have a product" +msgstr "Le produit de la commande n'a pas de produit" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon introuvable" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"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." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Renvoie la version actuelle d'eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Recettes et commandes (dernier %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Définit un jeu de vues pour la gestion des opérations liées à Evibes. La " +"classe EvibesViewSet hérite de ModelViewSet et fournit des fonctionnalités " +"permettant de gérer les actions et les opérations sur les entités Evibes. " +"Elle prend en charge les classes de sérialiseurs dynamiques en fonction de " +"l'action en cours, les autorisations personnalisables et les formats de " +"rendu." + +#: 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." +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 " +"sérialisation et l'extraction des données. Cette classe fait partie de la " +"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:175 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Gère les opérations liées aux objets Attribut au sein de l'application. " +"Fournit un ensemble de points d'accès à l'API pour interagir avec les " +"données d'attributs. Cette classe gère l'interrogation, le filtrage et la " +"sérialisation des objets Attribute, ce qui permet un contrôle dynamique des " +"données renvoyées, comme le filtrage par champs spécifiques ou la " +"récupération d'informations détaillées ou simplifiées en fonction de la " +"demande." + +#: 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." +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 " +"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." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"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 " +"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: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é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." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Gère les opérations liées au modèle `Product` dans le système. Cette classe " +"fournit un viewset pour gérer les produits, y compris leur filtrage, leur " +"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." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +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 " +"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: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 " +"use of Django's filtering system for querying data." +msgstr "" +"Représentation d'un ensemble de vues gérant des objets de retour " +"d'expérience. Cette classe gère les opérations liées aux objets de retour " +"d'information, notamment l'établissement de listes, le filtrage et " +"l'extraction de détails. L'objectif de ce jeu de vues est de fournir " +"différents sérialiseurs pour différentes actions et d'implémenter une " +"gestion basée sur les permissions des objets Feedback accessibles. Il étend " +"la classe de base `EvibesViewSet` et utilise le système de filtrage de " +"Django pour l'interrogation des données." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet pour la gestion des commandes et des opérations connexes. Cette " +"classe permet de récupérer, de modifier et de gérer des objets de commande. " +"Elle comprend divers points d'accès pour traiter les opérations de commande " +"telles que l'ajout ou la suppression de produits, l'exécution d'achats pour " +"des utilisateurs enregistrés ou non, et la récupération des commandes en " +"attente de l'utilisateur authentifié actuel. Le ViewSet utilise plusieurs " +"sérialiseurs en fonction de l'action spécifique effectuée et applique les " +"autorisations en conséquence lors de l'interaction avec les données de la " +"commande." + +#: 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 " +"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 " +"d'informations sur les instances OrderProduct." + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +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: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: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: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 " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Erreur de géocodage : {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Gère les opérations liées aux étiquettes de produits dans l'application. " +"Cette classe permet d'extraire, de filtrer et de sérialiser les étiquettes " +"de produits. Elle permet un filtrage flexible sur des attributs spécifiques " +"en utilisant le backend de filtrage spécifié et utilise dynamiquement " +"différents sérialiseurs en fonction de l'action effectuée." diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.mo b/engine/core/locale/he_IL/LC_MESSAGES/django.mo new file mode 100644 index 00000000..1e5947bf Binary files /dev/null and b/engine/core/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.po b/engine/core/locale/he_IL/LC_MESSAGES/django.po new file mode 100644 index 00000000..7c1df829 --- /dev/null +++ b/engine/core/locale/he_IL/LC_MESSAGES/django.po @@ -0,0 +1,3330 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: he-il\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "מזהה ייחודי" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "מזהה ייחודי משמש לזיהוי ודאי של כל אובייקט במסד הנתונים." + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "פעיל" + +#: engine/core/abstract.py:21 +msgid "" +"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" +msgstr "נוצר" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "כאשר האובייקט הופיע לראשונה במסד הנתונים" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "משונה" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "מתי האובייקט נערך לאחרונה" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "תרגומים" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "כללי" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "יחסים" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "מידע נוסף" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "מטא-נתונים" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "חותמות זמן" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "הפעל את %(verbose_name_plural)s שנבחר" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "הפריטים שנבחרו הופעלו!" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "השבת את %(verbose_name_plural)s שנבחר" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "פריטים נבחרים הושבתו!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "ערכי תכונות" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "תמונה" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "תמונות" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "מלאי" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "מניות" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "הזמן מוצר" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "ילדים" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "תצורה" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "ליבה" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "סיימתי" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "משלוח" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "נמסר" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "בוטל" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "נכשל" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "בהמתנה" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "התקבל" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "החזר כספי" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "תשלום" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "מוצלח" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "סכימת OpenAPI בפורמט נבחר בשפה נבחרת" + +#: engine/core/docs/drf/views.py:33 +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 "" +"סכימת OpenApi3 עבור ממשק API זה. ניתן לבחור את הפורמט באמצעות משא ומתן על " +"תוכן. ניתן לבחור את השפה באמצעות Accept-Language ופרמטר שאילתה." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "קלט/פלט מטמון" + +#: engine/core/docs/drf/views.py:46 +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" +msgstr "קבל רשימה של השפות הנתמכות" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "קבל את הפרמטרים החשופים של היישום" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "שלח הודעה לצוות התמיכה" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "בקש כתובת URL של CORS. מותר להשתמש רק ב-https." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "חפש בין מוצרים, קטגוריות ומותגים" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "נקודת קצה לחיפוש גלובלי לשאילתות בטבלאות הפרויקט" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "רכשו הזמנה כעסק" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"רכשו הזמנה כעסק, באמצעות `products` המסופק עם `product_uuid` ו-`attributes`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "הורדת נכס דיגיטלי מהזמנה דיגיטלית שנרכשה" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "הצג את כל קבוצות התכונות (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "איתור קבוצת תכונות אחת (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "צור קבוצת תכונות" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "מחיקת קבוצת תכונות" + +#: engine/core/docs/drf/viewsets.py:89 +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 "" +"שכתוב שדות מסוימים בקבוצת תכונות קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "הצג את כל התכונות (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "איתור תכונה בודדת (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "צור תכונה" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "מחיקת תכונה" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "שכתוב תכונה קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "שכתוב שדות מסוימים של תכונה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "רשימת כל ערכי התכונות (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "איתור ערך תכונה בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "צור ערך תכונה" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "מחיקת ערך תכונה" + +#: engine/core/docs/drf/viewsets.py:179 +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 "" +"שכתוב שדות מסוימים של ערך תכונה קיים תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "הצג את כל הקטגוריות (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "איתור קטגוריה אחת (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "קטגוריה UUID או slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "צור קטגוריה" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "מחק קטגוריה" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "תמונת מצב SEO Meta" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של הקטגוריה" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "הצג את כל הקטגוריות (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"חיפוש תת-מחרוזת ללא הבחנה בין אותיות גדולות וקטנות ב-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" +msgstr "סנן הזמנות עם buy_time >= תאריך ושעה זה ב-ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "סנן הזמנות עם buy_time <= תאריך ושעה זה ב-ISO 8601" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "סינון לפי UUID של הזמנה מדויק" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "סינון לפי מספר הזמנה מדויק הניתן לקריאה על ידי בני אדם" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"סינון לפי כתובת הדוא\"ל של המשתמש (התאמה מדויקת ללא הבחנה בין אותיות רישיות " +"לאותיות קטנות)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "סינון לפי UUID של המשתמש" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" +"מיין לפי אחד מהפרמטרים הבאים: 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)" +msgstr "איתור קטגוריה אחת (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "הזמן UUID או מזהה קריא לאדם" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "צור תכונה" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "לא עובד עבור משתמשים שאינם עובדים." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "מחיקת תכונה" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "מחיר הרכישה בעת ההזמנה" + +#: engine/core/docs/drf/viewsets.py:382 +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`, תתבצע עסקה." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "איתור הזמנה מושהית נוכחית של משתמש" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "מאתר הזמנה ממתנה נוכחית של משתמש מאומת" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "לרכוש הזמנה ללא יצירת חשבון" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "מסיים את רכישת ההזמנה עבור משתמש לא רשום." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "הוסף מוצר להזמנה" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "מוסיף מוצר להזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "הוסף רשימת מוצרים להזמנה, הכמויות לא ייספרו" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"מוסיף רשימת מוצרים להזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "הסר מוצר מההזמנה" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "מסיר מוצר מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "הסר מוצר מההזמנה, הכמויות לא ייספרו" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"מסיר רשימת מוצרים מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "הצג את כל התכונות (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "למשתמשים שאינם אנשי צוות, מוצגות רק רשימות המשאלות שלהם." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "איתור תכונה בודדת (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "צור תכונה" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "לא עובד עבור משתמשים שאינם עובדים." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "מחיקת תכונה" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "שכתוב תכונה קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "שכתוב שדות מסוימים של תכונה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "איתור רשימת המשאלות הנוכחית של משתמש" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "מציג רשימת משאלות בהמתנה של משתמש מאומת" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "הוסף מוצר להזמנה" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "מוסיף מוצר לרשימת המשאלות באמצעות `product_uuid` שסופק." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "הסר מוצר מרשימת המשאלות" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "מסיר מוצר מרשימת המשאלות באמצעות `product_uuid` שסופק." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "הוסף מוצרים רבים לרשימת המשאלות" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "מוסיף מוצרים רבים לרשימת המשאלות באמצעות `product_uuids` שסופק." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "הסר מוצר מההזמנה" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `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" +"• **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" +"`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`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "הצג את כל המוצרים (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "(מדויק) UUID של המוצר" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "איתור מוצר בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "צור מוצר" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "עדכן שדות מסוימים של מוצר קיים, תוך שמירה על שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "מחק מוצר" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "מפרט את כל המשובים המותרים עבור מוצר" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של המוצר" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "רשימת כל הכתובות" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "איתור כתובת אחת" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "צור כתובת חדשה" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "מחק כתובת" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "עדכון כתובת שלמה" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "עדכון חלקי של כתובת" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "השלמת כתובת אוטומטית" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "מחרוזת שאילתת נתונים גולמיים, אנא הוסף נתונים מנקודת הקצה של geo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "מגביל את כמות התוצאות, 1 < limit < 10, ברירת מחדל: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "הצג את כל המשובים (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "איתור משוב בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "ליצור משוב" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "מחק משוב" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "לשכתב משוב קיים תוך שמירת פריטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "לשכתב כמה שדות של משוב קיים תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "רשימת כל קשרי ההזמנות-מוצרים (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "איתור קשר יחיד בין הזמנה למוצר (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "יצירת קשר חדש בין הזמנה למוצר" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "החלפת קשר בין הזמנה למוצר קיים" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "עדכון חלקי של קשר בין הזמנה למוצר קיים" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "מחיקת קשר בין הזמנה למוצר" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "הצג את כל המותגים (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "איתור מותג בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID או סלאג של המותג" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "יצירת מותג" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "מחק מותג" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "שכתוב מותג קיים תוך שמירה על אלמנטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "שכתוב שדות מסוימים של מותג קיים תוך שמירה על שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "הצג את כל הספקים (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "איתור ספק בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "צור ספק" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "מחק את הספק" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "שכתוב ספק קיים תוך שמירת פריטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "שכתוב שדות מסוימים של ספק קיים תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "הצג את כל תמונות המוצר (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "איתור תמונה של מוצר בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "צור תמונה של המוצר" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "מחיקת תמונת מוצר" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "שכתוב תמונה קיימת של מוצר תוך שמירת אלמנטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"שכתוב שדות מסוימים בתמונת מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "הצג את כל קודי המבצע (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "איתור קוד קידום מכירות בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "צור קוד קידום מכירות" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "מחק את קוד המבצע" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "שכתוב קוד קידום מכירות קיים תוך שמירה על תוכן שאינו ניתן לעריכה" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"שכתוב שדות מסוימים בקוד קידום מכירות קיים תוך שמירה על שדות שאינם ניתנים " +"לעריכה" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "הצג את כל המבצעים (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "איתור מבצע בודד (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "צור מבצע" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "מחק מבצע" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "שכתוב מבצע קיים תוך שמירת פריטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "שכתוב שדות מסוימים של מבצע קיים תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "הצג את כל המניות (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "איתור מניה בודדת (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "צור רישום מלאי" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "מחיקת רשומת מלאי" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "שכתוב רשומת מלאי קיימת תוך שמירת פריטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"שכתוב שדות מסוימים ברשומת מלאי קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "הצג את כל תגי המוצר (תצוגה פשוטה)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "איתור תגית מוצר בודדת (תצוגה מפורטת)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "צור תגית מוצר" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "מחק תווית מוצר" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "שכתוב תגית מוצר קיימת תוך שמירת תוכן שאינו ניתן לעריכה" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"שכתוב שדות מסוימים בתגית מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "לא צויין מונח חיפוש." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "חיפוש" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "שם" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "קטגוריות" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "קטגוריות שבלולים" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "תגיות" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "מחיר מינימום" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "מחיר מקסימלי" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "פעיל" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "מותג" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "תכונות" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "כמות" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "שבלול" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "האם דיגיטלי" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "כלול תת-קטגוריות" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "כלול מוצרים שהוזמנו באופן אישי" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "מספר קטלוגי" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "חייב להיות category_uuid כדי להשתמש בדגל include_subcategories" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "חיפוש (מזהה, שם מוצר או מספר חלק)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "נקנה לאחר (כולל)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "נקנה לפני כן (כולל)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "דוא\"ל המשתמש" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID של המשתמש" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "סטטוס" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "מזהה קריא על ידי בני אדם" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "הורה" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "קטגוריה שלמה (יש לפחות מוצר אחד או לא)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "רמה" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID של המוצר" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "מפתח לחיפוש או להגדרה במטמון" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "נתונים לאחסון במטמון" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "פסק זמן בשניות להגדרת הנתונים במטמון" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "נתונים במטמון" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "הוסף מוצר להזמנה" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "הסר מוצר מההזמנה" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "הסר את כל המוצרים מההזמנה" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "קנה הזמנה" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "בצע פעולה ברשימת המוצרים בהזמנה" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "הסר/הוסף" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "בצע פעולה ברשימת המוצרים ברשימת המשאלות" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "אנא ספק את הערך `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "הוסף מוצר להזמנה" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "הסר מוצר מההזמנה" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "הסר מוצר מההזמנה" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "הסר מוצר מההזמנה" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "קנה הזמנה" + +#: 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" + +#: engine/core/graphene/mutations.py:549 +msgid "add or delete a feedback for orderproduct" +msgstr "הוספה או מחיקה של משוב עבור המוצר שהוזמן" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "הפעולה חייבת להיות `add` או `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} אינו קיים: {uuid}!" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "הגבול חייב להיות בין 1 ל-10" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - עובד כמו קסם" + +#: 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:95 +msgid "grouped attributes" +msgstr "תכונות מקובצות" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "קבוצות תכונות" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "מותגים" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "קטגוריות" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "אילו תכונות וערכים ניתן להשתמש בהם לסינון קטגוריה זו." + +#: 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:205 +msgid "tags for this category" +msgstr "תגיות עבור קטגוריה זו" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "מוצרים בקטגוריה זו" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "ספקים" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "קו רוחב (קואורדינטת Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "אורך (קואורדינטת X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "איך" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "מייצג משוב ממשתמש." + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "משוב" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "רשימת המוצרים בהזמנה זו" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "כתובת לחיוב" + +#: 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:414 +msgid "total price of this order" +msgstr "המחיר הכולל של הזמנה זו" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "כמות המוצרים הכוללת בהזמנה" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "עסקאות עבור הזמנה זו" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "הזמנות" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "כתובת URL של התמונה" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "תמונות המוצר" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "משובים" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "קבוצות תכונות" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "מחיר" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "כמות" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "מספר המשובים" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "מוצרים זמינים רק להזמנות אישיות" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "מחיר מוזל" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "מוצרים" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "קודי קידום מכירות" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "מוצרים במבצע" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "מבצעים" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "ספק" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "מוצר" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "מוצרים ברשימת המשאלות" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "רשימות משאלות" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "מוצרים מתויגים" + +#: 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:665 +msgid "tagged categories" +msgstr "קטגוריות מתויגות" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "תגיות קטגוריות" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "שם הפרויקט" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "שם החברה" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "כתובת החברה" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "מספר הטלפון של החברה" + +#: 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:681 +msgid "email host user" +msgstr "משתמש מארח דוא\"ל" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "סכום מקסימלי לתשלום" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "סכום מינימום לתשלום" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "נתוני ניתוח" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "נתוני פרסום" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "תצורה" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "קוד שפה" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "שם השפה" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "דגל השפה, אם קיים :)" + +#: 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 +msgid "products search results" +msgstr "תוצאות חיפוש מוצרים" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "תוצאות חיפוש מוצרים" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"מייצג קבוצת תכונות, שיכולה להיות היררכית. מחלקה זו משמשת לניהול וארגון " +"קבוצות תכונות. לקבוצת תכונות יכולה להיות קבוצת אב, היוצרת מבנה היררכי. זה " +"יכול להיות שימושי לסיווג וניהול תכונות בצורה יעילה יותר במערכת מורכבת." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "הורה של קבוצה זו" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "קבוצת תכונות הורה" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "שם קבוצת התכונות" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "קבוצת תכונות" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"מייצג ישות ספק המסוגלת לאחסן מידע אודות ספקים חיצוניים ודרישות האינטראקציה " +"שלהם. מחלקת הספק משמשת להגדרת וניהול מידע הקשור לספק חיצוני. היא מאחסנת את " +"שם הספק, פרטי האימות הנדרשים לתקשורת ואת אחוז התוספת המחיר המוחל על מוצרים " +"הנרכשים מהספק. מודל זה גם מתחזק מטא-נתונים ואילוצים נוספים, מה שהופך אותו " +"מתאים לשימוש במערכות המקיימות אינטראקציה עם ספקים צד שלישי." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "מאחסן את פרטי ההזדהות ונקודות הקצה הנדרשים לתקשורת API של הספק" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "מידע אימות" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "הגדר את הסימון עבור מוצרים שנרכשו מספק זה" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "אחוז תוספת הספק" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "שם הספק הזה" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "שם הספק" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "קובץ תגובה" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "תגובת העיבוד האחרונה של הספק" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "נתיב קובץ האינטגרציה של הספק" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "נתיב אינטגרציה" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"מייצג תגית מוצר המשמשת לסיווג או זיהוי מוצרים. מחלקת ProductTag נועדה לזהות " +"ולסווג מוצרים באופן ייחודי באמצעות שילוב של מזהה תגית פנימי ושם תצוגה " +"ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית" +" של מטא-נתונים למטרות ניהוליות." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "מזהה תווית פנימי עבור תווית המוצר" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "שם היום" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "שם ידידותי למשתמש עבור תווית המוצר" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "שם תצוגה של התג" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "תגית מוצר" + +#: engine/core/models.py:229 +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 "" +"מייצג תווית קטגוריה המשמשת למוצרים. מחלקה זו מדגמת תווית קטגוריה שניתן " +"להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם" +" תצוגה ידידותי למשתמש." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "תגית קטגוריה" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "תגיות קטגוריה" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"מייצג ישות קטגוריה לארגון וקיבוץ פריטים קשורים במבנה היררכי. לקטגוריות " +"עשויות להיות יחסי היררכיה עם קטגוריות אחרות, התומכות ביחסי הורה-ילד. המחלקת " +"כוללת שדות למטא-נתונים וייצוג חזותי, המשמשים כבסיס לתכונות הקשורות " +"לקטגוריות. מחלקה זו משמשת בדרך כלל להגדרת וניהול קטגוריות מוצרים או קבוצות " +"דומות אחרות בתוך יישום, ומאפשרת למשתמשים או למנהלים לציין את השם, התיאור " +"וההיררכיה של הקטגוריות, וכן להקצות תכונות כגון תמונות, תגיות או עדיפות." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "העלה תמונה המייצגת קטגוריה זו" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "תמונה בקטגוריה" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "הגדר אחוז תוספת מחיר עבור מוצרים בקטגוריה זו" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "הורה של קטגוריה זו כדי ליצור מבנה היררכי" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "קטגוריה ראשית" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "שם הקטגוריה" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "ציין שם לקטגוריה זו" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "הוסף תיאור מפורט לקטגוריה זו" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "תיאור הקטגוריה" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "עדיפות" + +#: engine/core/models.py:438 +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." +msgstr "" +"מייצג אובייקט מותג במערכת. מחלקה זו מטפלת במידע ובתכונות הקשורים למותג, כולל" +" שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " +"ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "שם המותג" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "שם המותג" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "העלה לוגו המייצג את המותג הזה" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "תמונה קטנה של המותג" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "העלה לוגו גדול המייצג את המותג הזה" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "תמונה גדולה של המותג" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "הוסף תיאור מפורט של המותג" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "תיאור המותג" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת " +"מעקב והערכה של מוצרים הזמינים מספקים שונים." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "הספק המספק את מלאי המוצר הזה" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "ספק נלווה" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "המחיר הסופי ללקוח לאחר תוספות" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "מחיר המכירה" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "המוצר הקשור לרישום המלאי הזה" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "מוצר נלווה" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "המחיר ששולם למוכר עבור מוצר זה" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "מחיר הרכישה של הספק" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "כמות המוצר הזמינה במלאי" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "כמות במלאי" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "מק\"ט הספק" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "קובץ דיגיטלי" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "מאפייני המערכת" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "רישומים במלאי" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"מייצג מוצר עם תכונות כגון קטגוריה, מותג, תגיות, סטטוס דיגיטלי, שם, תיאור, " +"מספר חלק ו-slug. מספק תכונות שירות נלוות לאחזור דירוגים, ספירת משובים, מחיר," +" כמות והזמנות סה\"כ. מיועד לשימוש במערכת המטפלת במסחר אלקטרוני או בניהול " +"מלאי. מחלקה זו מתקשרת עם מודלים נלווים (כגון קטגוריה, מותג ותגית מוצר) " +"ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" +" משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "הקטגוריה אליה שייך מוצר זה" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "האם המוצר הוא דיגיטלי?" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "ספק שם מזהה ברור למוצר" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "שם המוצר" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "הוסף תיאור מפורט של המוצר" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "תיאור המוצר" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "מספר חלק עבור מוצר זה" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "מספר חלק" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "יחידת אחסון מלאי עבור מוצר זה" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"מייצג תכונה במערכת. מחלקה זו משמשת להגדרת תכונות ולניהולן. תכונות הן נתונים " +"הניתנים להתאמה אישית, שניתן לקשר לישויות אחרות. לתכונות יש קטגוריות, קבוצות," +" סוגי ערכים ושמות משויכים. המודל תומך בסוגים רבים של ערכים, כולל מחרוזת, " +"מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית " +"וגמישה." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "קבוצה של תכונה זו" + +#: engine/core/models.py:739 +msgid "string" +msgstr "מחרוזת" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "יושרה" + +#: engine/core/models.py:741 +msgid "float" +msgstr "צף" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "בוליאני" + +#: engine/core/models.py:743 +msgid "array" +msgstr "מערך" + +#: engine/core/models.py:744 +msgid "object" +msgstr "אובייקט" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "סוג ערך התכונה" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "סוג ערך" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "שם התכונה הזו" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "שם התכונה" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "ניתן לסינון" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" +"מייצג ערך ספציפי עבור תכונה המקושרת למוצר. הוא מקשר את ה\"תכונה\" ל\"ערך\" " +"ייחודי, ומאפשר ארגון טוב יותר וייצוג דינמי של מאפייני המוצר." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "תכונה של ערך זה" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "המוצר הספציפי הקשור לערך של תכונה זו" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "ספק טקסט חלופי לתמונה לצורך נגישות" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "טקסט חלופי לתמונה" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "העלה את קובץ התמונה עבור מוצר זה" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "תמונת מוצר" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "קובע את סדר הצגת התמונות" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "עדיפות תצוגה" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "המוצר שהדימוי הזה מייצג" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "תמונות מוצרים" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"מייצג קמפיין קידום מכירות למוצרים בהנחה. מחלקה זו משמשת להגדרת וניהול " +"קמפיינים לקידום מכירות המציעים הנחה באחוזים על מוצרים. המחלקה כוללת תכונות " +"להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא " +"משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "אחוז ההנחה עבור המוצרים שנבחרו" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "אחוז ההנחה" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "ציין שם ייחודי לקידום מכירות זה" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "שם המבצע" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "תיאור המבצע" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "בחר אילו מוצרים כלולים במבצע זה" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "מוצרים כלולים" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "קידום" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"מייצג את רשימת המשאלות של המשתמש לאחסון וניהול מוצרים רצויים. המחלקה מספקת " +"פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, " +"וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "מוצרים שהמשתמש סימן כנחשקים" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "המשתמש שבבעלותו רשימת המשאלות הזו" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "בעל רשימת המשאלות" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "רשימת משאלות" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"מייצג תיעוד הקשור למוצר. מחלקה זו משמשת לאחסון מידע על תיעוד הקשור למוצרים " +"ספציפיים, כולל העלאת קבצים ומטא-נתונים שלהם. היא מכילה שיטות ותכונות לטיפול " +"בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של " +"מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "סרט תיעודי" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "סרטים תיעודיים" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"מייצג ישות כתובת הכוללת פרטים על מיקום וקשרים עם משתמש. מספק פונקציונליות " +"לאחסון נתונים גיאוגרפיים וכתובות, וכן אינטגרציה עם שירותי קידוד גיאוגרפי. " +"מחלקה זו נועדה לאחסן מידע מפורט על כתובות, כולל רכיבים כגון רחוב, עיר, אזור," +" מדינה ומיקום גיאוגרפי (קו אורך וקו רוחב). היא תומכת באינטגרציה עם ממשקי API" +" לקידוד גיאוגרפי, ומאפשרת אחסון של תגובות API גולמיות לעיבוד או בדיקה " +"נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " +"אישית." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "שורת כתובת עבור הלקוח" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "שורת כתובת" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "רחוב" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "מחוז" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "עיר" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "אזור" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "מיקוד" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "מדינה" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "תגובת JSON שמורה משירות הגיאו-קידוד" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "כתובת" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "כתובות" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"מייצג קוד קידום מכירות שניתן להשתמש בו לקבלת הנחות, לניהול תוקפו, סוג ההנחה " +"והשימוש בו. מחלקת PromoCode מאחסנת פרטים אודות קוד קידום מכירות, כולל המזהה " +"הייחודי שלו, מאפייני ההנחה (סכום או אחוז), תקופת התוקף, המשתמש המשויך (אם " +"יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," +" תוך הקפדה על עמידה באילוצים." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "מזהה קוד קידום מכירות" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "סכום הנחה קבוע" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "אחוז ההנחה" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "חותמת זמן לתוקף הקוד המקדם מכירות" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "תוקף הסוף" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "תאריך התחילה של תוקף קוד המבצע" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "תחילת תוקף" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "חותמת זמן שימוש" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "משתמש שהוקצה" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "קוד קידום מכירות" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "קודי קידום מכירות" + +#: engine/core/models.py:1150 +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" +msgstr "קוד המבצע כבר נוצל" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "כתובת החיוב המשמשת להזמנה זו" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "קוד קידום מכירות שהוחל" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "כתובת המשלוח המשמשת להזמנה זו" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "כתובת למשלוח" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "סטטוס ההזמנה" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת " +"טבלה." + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "המשתמש שהזמין את ההזמנה" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "משתמש" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "החותמת הזמן שבה הושלמה ההזמנה" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "לקנות זמן" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "מזהה קריא לאדם עבור ההזמנה" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "מזהה קריא על ידי בני אדם" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "הזמנה" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} אינו קיים בשאילתה <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "קוד קידום מכירות אינו קיים" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "הכתובת אינה קיימת" + +#: 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 "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "ערך כוח לא חוקי" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "אי אפשר לרכוש הזמנה ריקה!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "אי אפשר לקנות הזמנה בלי משתמש!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "אין מספיק כסף כדי להשלים את ההזמנה" + +#: engine/core/models.py:1575 +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}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "הערות משוב" + +#: engine/core/models.py:1719 +msgid "" +"references the specific product in an order that this feedback is about" +msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "מוצר בהזמנה קשורה" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "דירוג שהוקצה על ידי המשתמש למוצר" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "דירוג מוצר" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"מייצג מוצרים הקשורים להזמנות ותכונותיהם. מודל OrderProduct שומר מידע על מוצר" +" שהוא חלק מהזמנה, כולל פרטים כגון מחיר הרכישה, כמות, תכונות המוצר ומצב. הוא " +"מנהל התראות למשתמש ולמנהלים ומטפל בפעולות כגון החזרת יתרת המוצר או הוספת " +"משוב. מודל זה מספק גם שיטות ותכונות התומכות בלוגיקה עסקית, כגון חישוב המחיר " +"הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " +"Order ו-Product ומאחסן הפניה אליהם." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "מחיר הרכישה בעת ההזמנה" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "הערות פנימיות" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "הודעות למשתמשים" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "ייצוג JSON של תכונות פריט זה" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "תכונות המוצר שהוזמן" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "הפניה להזמנה הראשית המכילה מוצר זה" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "הזמנת הורים" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "המוצר הספציפי הקשור לשורת הזמנה זו" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "כמות המוצר הספציפי הזה בהזמנה" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "כמות המוצר" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "סטטוס קו המוצרים" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "פעולה שגויה שצוינה עבור משוב: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "אינך יכול להחזיר הזמנה שלא התקבלה" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "שם" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "כתובת ה-URL של האינטגרציה" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "אישורי אימות" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "קישור CRM של ההזמנה" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "קישורי CRM של הזמנות" + +#: engine/core/models.py:1947 +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." +msgstr "" +"מייצג את פונקציונליות ההורדה של נכסים דיגיטליים הקשורים להזמנות. מחלקת " +"DigitalAssetDownload מספקת את היכולת לנהל ולהיכנס להורדות הקשורות למוצרים " +"שהוזמנו. היא שומרת מידע על המוצר שהוזמן, מספר ההורדות והאם הנכס גלוי לציבור." +" היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " +"'הושלמה'." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "הורדה" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "הורדות" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "עליך לספק תגובה, דירוג ומספר זיהוי מוצר (uuid) כדי להוסיף משוב." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "בית" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "צור קשר" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "אודות" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "תמהיל לקוחות (30 יום)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "לקוחות חדשים" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "לקוחות חוזרים" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "אין פעילות של לקוחות ב-30 הימים האחרונים." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "מכירות יומיות" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "הזמנות (הושלמו)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "הכנסות ברוטו" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "הזמנות" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "גרוס" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "לוח מחוונים" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "סקירת הכנסות" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "הכנסות נטו" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "מסים" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "החזרות" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "הכנסות ברוטו" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "בנתונים" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "הכנסות נטו" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "שיעור ההחזר" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "הוחזר" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "מלאי נמוך" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "אין פריטים במלאי נמוך." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "רוב המוצרים שהוחזרו (30 יום)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "אין החזרות ב-30 הימים האחרונים." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "המוצר המבוקש ביותר" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "אין עדיין נתונים." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "המוצר הפופולרי ביותר" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "קישורים מהירים" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "אין קישורים זמינים." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "משלוח לעומת דיגיטלי (30 יום)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "דיגיטלי" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "נשלח" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "הקטגוריות המובילות לפי כמות (30 יום)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "אין מכירות בקטגוריה זו ב-30 הימים האחרונים." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "מנהל אתר Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "אישור הזמנה" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "לוגו" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "שלום %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"תודה על הזמנתך #%(order.pk)s! אנו שמחים להודיע לך שהזמנתך נכנסה לעיבוד. להלן" +" פרטי הזמנתך:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "סה\"כ" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "מחיר כולל" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "בברכה,
צוות %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "כל הזכויות שמורות" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "ההזמנה נמסרה" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "שלום %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "הזמנתך №%(order_uuid)s טופלה בהצלחה! להלן פרטי הזמנתך:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "מידע נוסף" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "ערך" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "אם יש לך שאלות, אל תהסס לפנות לתמיכה שלנו ב-%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "בברכה,
צוות %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "מפתח" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "הוסף שורה" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "קוד קידום מכירות מוענק" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +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" +" the details of your order:" +msgstr "תודה על הזמנתך! אנו שמחים לאשר את רכישתך. להלן פרטי הזמנתך:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "מחיר משלוח" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "ההזמנה שלך תסופק לכתובת הבאה:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "בברכה,
צוות %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "כל הזכויות שמורות" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "נדרשים הן הנתונים והן זמן ההמתנה" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | צור קשר יוזם" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | אישור הזמנה" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | הזמנה נמסרה" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "אין לך הרשאה לבצע פעולה זו." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!" + +#: engine/core/validators.py:19 +#, 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} פיקסלים!" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "מחזיר רשימה של שפות נתמכות והמידע המתאים להן." + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "מחזיר את הפרמטרים של האתר כאובייקט JSON." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"מטפל בפעולות מטמון כגון קריאה והגדרת נתוני מטמון עם מפתח וזמן המתנה מוגדרים." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "מטפל בהגשת טפסי \"צור קשר\"." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "מטפל בבקשות לעיבוד ואימות כתובות URL מבקשות POST נכנסות." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "מטפל בשאילתות חיפוש גלובליות." + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." + +#: engine/core/views.py:332 +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." +msgstr "" +"מטפל בהורדת נכס דיגיטלי הקשור להזמנה. פונקציה זו מנסה להציג את קובץ הנכס " +"הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " +"HTTP 404 המציינת שהמשאב אינו זמין." + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid נדרש" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "המוצר שהוזמן אינו קיים" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "למוצר ההזמנה אין מוצר" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "לא נמצא סמל מועדף" + +#: engine/core/views.py:404 +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." +msgstr "" +"מטפל בבקשות לסמל המועדף של אתר אינטרנט. פונקציה זו מנסה להציג את קובץ הסמל " +"המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " +"שגיאת HTTP 404 המציינת שהמשאב אינו זמין." + +#: engine/core/views.py:416 +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 "" +"מנתב את הבקשה לדף האינדקס של המנהל. הפונקציה מטפלת בבקשות HTTP נכנסות ומנתבת" +" אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " +"של Django לטיפול בהפניה HTTP." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "מחזיר את הגרסה הנוכחית של eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "הכנסות והזמנות (אחרון %(days)d)" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "מחזיר משתנים מותאמים אישית עבור לוח המחוונים." + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"מגדיר קבוצת תצוגות לניהול פעולות הקשורות ל-Evibes. מחלקת EvibesViewSet יורשת" +" מ-ModelViewSet ומספקת פונקציונליות לטיפול בפעולות ובפעולות על ישויות " +"Evibes. היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה " +"הנוכחית, הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד." + +#: 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." +msgstr "" +"מייצג קבוצת תצוגות לניהול אובייקטי AttributeGroup. מטפל בפעולות הקשורות " +"ל-AttributeGroup, כולל סינון, סידור סדרתי ואחזור נתונים. מחלקה זו היא חלק " +"משכבת ה-API של היישום ומספקת דרך סטנדרטית לעיבוד בקשות ותגובות עבור נתוני " +"AttributeGroup." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"מטפל בפעולות הקשורות לאובייקטי Attribute בתוך היישום. מספק קבוצת נקודות קצה " +"API לתקשורת עם נתוני Attribute. מחלקה זו מנהלת שאילתות, סינון וסידור סדרתי " +"של אובייקטי Attribute, ומאפשרת שליטה דינמית על הנתונים המוחזרים, כגון סינון " +"לפי שדות ספציפיים או אחזור מידע מפורט לעומת מידע מפושט, בהתאם לבקשה." + +#: 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." +msgstr "" +"סט תצוגה לניהול אובייקטי AttributeValue. סט תצוגה זה מספק פונקציונליות " +"לרישום, אחזור, יצירה, עדכון ומחיקה של אובייקטי AttributeValue. הוא משתלב " +"במנגנוני סט התצוגה של Django REST Framework ומשתמש בממירים מתאימים לפעולות " +"שונות. יכולות סינון מסופקות באמצעות DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"מנהל תצוגות עבור פעולות הקשורות לקטגוריות. מחלקת CategoryViewSet אחראית " +"לטיפול בפעולות הקשורות למודל הקטגוריות במערכת. היא תומכת באחזור, סינון " +"וסידור נתוני קטגוריות. מערך התצוגות גם אוכף הרשאות כדי להבטיח שרק משתמשים " +"מורשים יוכלו לגשת לנתונים ספציפיים." + +#: 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 לאובייקטים של מותג." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"מנהל פעולות הקשורות למודל `Product` במערכת. מחלקה זו מספקת מערך תצוגה לניהול" +" מוצרים, כולל סינון, סידור סדרתי ופעולות על מופעים ספציפיים. היא מרחיבה את " +"`EvibesViewSet` כדי להשתמש בפונקציונליות משותפת ומשתלבת עם מסגרת Django REST" +" עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה " +"למשוב הקשור למוצר." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"מייצג קבוצת תצוגות לניהול אובייקטי ספק. קבוצת תצוגות זו מאפשרת לאחזר, לסנן " +"ולסדר נתוני ספק. היא מגדירה את קבוצת השאילתות, תצורות המסננים ומחלקות הסידור" +" המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים " +"הקשורים לספק באמצעות מסגרת Django REST." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"ייצוג של קבוצת תצוגה המטפלת באובייקטי משוב. מחלקה זו מנהלת פעולות הקשורות " +"לאובייקטי משוב, כולל רישום, סינון ואחזור פרטים. מטרת קבוצת תצוגה זו היא לספק" +" סדרנים שונים לפעולות שונות וליישם טיפול מבוסס הרשאות באובייקטי משוב נגישים." +" היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django " +"לשאילתת נתונים." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet לניהול הזמנות ופעולות נלוות. מחלקה זו מספקת פונקציונליות לאחזור, " +"שינוי וניהול אובייקטי הזמנה. היא כוללת נקודות קצה שונות לטיפול בפעולות הזמנה" +" כגון הוספה או הסרה של מוצרים, ביצוע רכישות עבור משתמשים רשומים ולא רשומים, " +"ואחזור הזמנות ממתנות של המשתמש המאושר הנוכחי. ViewSet משתמש במספר סדרנים " +"בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " +"הזמנה." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"מספק סט תצוגה לניהול ישויות OrderProduct. סט תצוגה זה מאפשר פעולות CRUD " +"ופעולות מותאמות אישית ספציפיות למודל OrderProduct. הוא כולל סינון, בדיקות " +"הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " +"לטיפול במשוב על מופעים של OrderProduct." + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." + +#: 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:914 +msgid "Represents a view set for managing promotions. " +msgstr "מייצג קבוצת תצוגות לניהול מבצעים." + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." + +#: 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 " +"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 זה מאפשר פונקציונליות כגון הוספה, הסרה " +"ופעולות מרובות עבור מוצרים ברשימת המשאלות. בדיקות הרשאה משולבות כדי להבטיח " +"שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " +"מפורשות." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"מחלקת זו מספקת פונקציונליות של קבוצת תצוגה לניהול אובייקטי `Address`. מחלקת " +"AddressViewSet מאפשרת פעולות CRUD, סינון ופעולות מותאמות אישית הקשורות " +"לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " +"סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "שגיאת קידוד גיאוגרפי: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"מטפל בפעולות הקשורות לתגי מוצר בתוך היישום. מחלקה זו מספקת פונקציונליות " +"לאחזור, סינון וסידור אובייקטי תגי מוצר. היא תומכת בסינון גמיש של תכונות " +"ספציפיות באמצעות מנגנון הסינון שצוין, ומשתמשת באופן דינמי במנגנוני סידור " +"שונים בהתאם לפעולה המבוצעת." diff --git a/core/locale/hi_IN/LC_MESSAGES/django.mo b/engine/core/locale/hi_IN/LC_MESSAGES/django.mo similarity index 92% rename from core/locale/hi_IN/LC_MESSAGES/django.mo rename to engine/core/locale/hi_IN/LC_MESSAGES/django.mo index 0fc354f2..7640ce00 100644 Binary files a/core/locale/hi_IN/LC_MESSAGES/django.mo and b/engine/core/locale/hi_IN/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/hi_IN/LC_MESSAGES/django.po b/engine/core/locale/hi_IN/LC_MESSAGES/django.po new file mode 100644 index 00000000..2898d6a5 --- /dev/null +++ b/engine/core/locale/hi_IN/LC_MESSAGES/django.po @@ -0,0 +1,3138 @@ +# EVIBES GETTEXT TRANSLATIONS +# 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-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "" + +#: engine/core/abstract.py:21 +msgid "" +"if set to false, this object can't be seen by users without needed permission" +msgstr "" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "" + +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +msgid "failed" +msgstr "" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "" + +#: engine/core/docs/drf/views.py:33 +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 "" + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "" + +#: engine/core/docs/drf/views.py:46 +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" +msgstr "" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "" + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:89 +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 "" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:179 +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 "" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:430 +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" + +#: 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" +"• **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" +"`b64-description=icontains-aGVhdC1jb2xk`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"Comma-separated list of fields to sort by. Prefix with `-` for " +"descending. \n" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "" + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "" + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "" + +#: 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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "" + +#: engine/core/graphene/mutations.py:576 +#, python-brace-format +msgid "order product {order_product_uuid} not found" +msgstr "" + +#: engine/core/graphene/mutations.py:582 +msgid "original address string provided by the user" +msgstr "" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "" + +#: 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:95 +msgid "grouped attributes" +msgstr "" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "" + +#: 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:205 +msgid "tags for this category" +msgstr "" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "" + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "" + +#: 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:414 +msgid "total price of this order" +msgstr "" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "" + +#: 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:665 +msgid "tagged categories" +msgstr "" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "" + +#: 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:681 +msgid "email host user" +msgstr "" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "" + +#: 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 +msgid "products search results" +msgstr "" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "" + +#: engine/core/models.py:229 +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 "" + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "" + +#: engine/core/models.py:438 +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." +msgstr "" + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "" + +#: engine/core/models.py:739 +msgid "string" +msgstr "" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "" + +#: engine/core/models.py:741 +msgid "float" +msgstr "" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "" + +#: engine/core/models.py:743 +msgid "array" +msgstr "" + +#: engine/core/models.py:744 +msgid "object" +msgstr "" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "" + +#: engine/core/models.py:1150 +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" +msgstr "" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "" + +#: 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 "" + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "" + +#: engine/core/models.py:1575 +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 "" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "" + +#: engine/core/models.py:1719 +msgid "references the specific product in an order that this feedback is about" +msgstr "" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "" + +#: engine/core/models.py:1947 +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." +msgstr "" + +#: engine/core/models.py:1961 +msgid "download" +msgstr "" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +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" +" the details of your order:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "" + +#: engine/core/utils/messages.py:3 +msgid "you do not have permission to perform this action." +msgstr "" + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "" + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: engine/core/views.py:332 +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." +msgstr "" + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "" + +#: engine/core/views.py:404 +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." +msgstr "" + +#: engine/core/views.py:416 +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:429 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "" + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: 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 "" + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: 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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/engine/core/locale/hr_HR/LC_MESSAGES/django.mo b/engine/core/locale/hr_HR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..6c5906d1 Binary files /dev/null and b/engine/core/locale/hr_HR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/hr_HR/LC_MESSAGES/django.po b/engine/core/locale/hr_HR/LC_MESSAGES/django.po new file mode 100644 index 00000000..7faa342c --- /dev/null +++ b/engine/core/locale/hr_HR/LC_MESSAGES/django.po @@ -0,0 +1,3138 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "" + +#: engine/core/abstract.py:21 +msgid "" +"if set to false, this object can't be seen by users without needed permission" +msgstr "" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "" + +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +msgid "failed" +msgstr "" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "" + +#: engine/core/docs/drf/views.py:33 +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 "" + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "" + +#: engine/core/docs/drf/views.py:46 +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" +msgstr "" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "" + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:89 +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 "" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:179 +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 "" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:430 +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" + +#: 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" +"• **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" +"`b64-description=icontains-aGVhdC1jb2xk`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"Comma-separated list of fields to sort by. Prefix with `-` for " +"descending. \n" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "" + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "" + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "" + +#: 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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "" + +#: engine/core/graphene/mutations.py:576 +#, python-brace-format +msgid "order product {order_product_uuid} not found" +msgstr "" + +#: engine/core/graphene/mutations.py:582 +msgid "original address string provided by the user" +msgstr "" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "" + +#: 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:95 +msgid "grouped attributes" +msgstr "" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "" + +#: 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:205 +msgid "tags for this category" +msgstr "" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "" + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "" + +#: 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:414 +msgid "total price of this order" +msgstr "" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "" + +#: 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:665 +msgid "tagged categories" +msgstr "" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "" + +#: 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:681 +msgid "email host user" +msgstr "" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "" + +#: 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 +msgid "products search results" +msgstr "" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "" + +#: engine/core/models.py:229 +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 "" + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "" + +#: engine/core/models.py:438 +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." +msgstr "" + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "" + +#: engine/core/models.py:739 +msgid "string" +msgstr "" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "" + +#: engine/core/models.py:741 +msgid "float" +msgstr "" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "" + +#: engine/core/models.py:743 +msgid "array" +msgstr "" + +#: engine/core/models.py:744 +msgid "object" +msgstr "" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "" + +#: engine/core/models.py:1150 +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" +msgstr "" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "" + +#: 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 "" + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "" + +#: engine/core/models.py:1575 +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 "" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "" + +#: engine/core/models.py:1719 +msgid "references the specific product in an order that this feedback is about" +msgstr "" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "" + +#: engine/core/models.py:1947 +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." +msgstr "" + +#: engine/core/models.py:1961 +msgid "download" +msgstr "" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +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" +" the details of your order:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "" + +#: engine/core/utils/messages.py:3 +msgid "you do not have permission to perform this action." +msgstr "" + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "" + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: engine/core/views.py:332 +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." +msgstr "" + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "" + +#: engine/core/views.py:404 +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." +msgstr "" + +#: engine/core/views.py:416 +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:429 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "" + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: 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 "" + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: 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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.mo b/engine/core/locale/id_ID/LC_MESSAGES/django.mo new file mode 100644 index 00000000..3189ee3d Binary files /dev/null and b/engine/core/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.po b/engine/core/locale/id_ID/LC_MESSAGES/django.po new file mode 100644 index 00000000..0998411f --- /dev/null +++ b/engine/core/locale/id_ID/LC_MESSAGES/django.po @@ -0,0 +1,3523 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: id-id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +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" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Aktif" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Dibuat" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Saat objek pertama kali muncul di database" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Dimodifikasi" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Kapan objek terakhir kali diedit" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Terjemahan" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Umum" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Hubungan" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "info tambahan" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Stempel waktu" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Item yang dipilih telah diaktifkan!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Item yang dipilih telah dinonaktifkan!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Nilai Atribut" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Gambar" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Gambar" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stok" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Saham" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Pesan Produk" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Anak-anak" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfigurasi" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Inti" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Selesai." + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Menyampaikan" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Disampaikan." + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Dibatalkan" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Gagal" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Pending" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Diterima" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Uang Dikembalikan" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Pembayaran" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Berhasil" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Skema OpenAPI dalam format yang dipilih dengan bahasa yang dipilih" + +#: engine/core/docs/drf/views.py:33 +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 "" +"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:37 +msgid "cache I/O" +msgstr "I/O Cache" + +#: engine/core/docs/drf/views.py:46 +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 "" +"Terapkan hanya kunci untuk membaca data yang diizinkan dari cache.\n" +"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" +msgstr "Dapatkan daftar bahasa yang didukung" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Dapatkan parameter aplikasi yang dapat diekspos" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Meminta URL CORSed. Hanya https yang diizinkan." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Mencari di antara produk, kategori, dan merek" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Titik akhir pencarian global untuk melakukan kueri di seluruh tabel proyek" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Beli pesanan sebagai Bisnis" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Beli pesanan sebagai bisnis, menggunakan `produk` yang disediakan dengan " +"`product_uuid` dan `atribut`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "mengunduh aset digital dari pesanan digital yang dibeli" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Buat daftar semua grup atribut (tampilan sederhana)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Mengambil grup atribut tunggal (tampilan detail)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Membuat grup atribut" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Menghapus grup atribut" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Menulis ulang grup atribut yang sudah ada dan menyimpan grup yang tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Daftar semua atribut (tampilan sederhana)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Mengambil atribut tunggal (tampilan detail)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Membuat atribut" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Menghapus atribut" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Menulis ulang atribut yang sudah ada dengan menyimpan atribut yang tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Menulis ulang beberapa bidang dari atribut yang sudah ada sehingga tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Daftar semua nilai atribut (tampilan sederhana)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Mengambil nilai atribut tunggal (tampilan detail)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Membuat nilai atribut" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Menghapus nilai atribut" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Menulis ulang nilai atribut yang sudah ada dan menyimpan nilai yang tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:186 +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" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Daftar semua kategori (tampilan sederhana)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Mengambil satu kategori (tampilan detail)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Kategori UUID atau siput" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Membuat kategori" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Menghapus kategori" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "" +"Menulis ulang kategori yang sudah ada dan menyimpan kategori yang tidak " +"dapat diedit" + +#: 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 "" +"Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak " +"dapat diedit" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "Cuplikan Meta SEO" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Mengembalikan cuplikan data meta SEO kategori" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Daftar semua kategori (tampilan sederhana)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Untuk pengguna non-staf, hanya pesanan mereka sendiri yang dikembalikan." + +#: 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" +msgstr "" +"Pencarian substring yang tidak peka huruf besar/kecil di human_readable_id, " +"order_produk.product.name, dan order_produk.product.partnumber" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Filter pesanan dengan waktu_beli >= waktu_data ISO 8601 ini" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filter pesanan dengan waktu_beli <= waktu_data ISO 8601 ini" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filter berdasarkan urutan yang tepat UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +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)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Memfilter berdasarkan UUID pengguna" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filter berdasarkan status pesanan (pencocokan substring yang tidak peka " +"huruf besar-kecil)" + +#: 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')." +msgstr "" +"Urutkan berdasarkan salah satu dari: uuid, human_readable_id, user_email, " +"user, status, created, modified, buy_time, random. Awalan dengan '-' untuk " +"menurun (contoh: '-buy_time')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Mengambil satu kategori (tampilan detail)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Pesan UUID atau id yang dapat dibaca manusia" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Membuat atribut" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Tidak dapat digunakan oleh pengguna non-staf." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Menghapus atribut" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" +"Menulis ulang kategori yang sudah ada dan menyimpan kategori yang tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Harga pembelian pada saat pemesanan" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Menyelesaikan pembelian pesanan. Jika `force_balance` digunakan, pembelian " +"diselesaikan menggunakan saldo pengguna; Jika `force_payment` digunakan, " +"transaksi dimulai." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "mengambil pesanan yang tertunda saat ini dari pengguna" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "membeli pesanan tanpa pembuatan akun" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "menyelesaikan pembelian pesanan untuk pengguna yang tidak terdaftar." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Menambahkan produk ke pesanan" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Menambahkan produk ke pesanan menggunakan `product_uuid` dan `atribut` yang " +"disediakan." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Tambahkan daftar produk yang akan dipesan, jumlah tidak akan dihitung" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Menambahkan daftar produk ke pesanan menggunakan `product_uuid` dan " +"`atribut` yang disediakan." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Menghapus produk dari pesanan" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Menghapus produk dari pesanan menggunakan `product_uuid` dan `atribut` yang " +"disediakan." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Menghapus produk dari pesanan, jumlah tidak akan dihitung" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Menghapus daftar produk dari pesanan menggunakan `product_uuid` dan " +"`atribut` yang disediakan." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Daftar semua atribut (tampilan sederhana)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Untuk pengguna non-staf, hanya daftar keinginan mereka sendiri yang " +"dikembalikan." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Mengambil atribut tunggal (tampilan detail)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Membuat atribut" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Tidak dapat digunakan oleh pengguna non-staf." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Menghapus atribut" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Menulis ulang atribut yang sudah ada dengan menyimpan atribut yang tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Menulis ulang beberapa bidang dari atribut yang sudah ada sehingga tidak " +"dapat diedit" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "mengambil daftar keinginan yang tertunda dari pengguna saat ini" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"mengambil daftar keinginan yang tertunda saat ini dari pengguna yang " +"diautentikasi" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Menambahkan produk ke pesanan" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Menambahkan produk ke daftar keinginan menggunakan `product_uuid` yang " +"disediakan" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Menghapus produk dari daftar keinginan" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Menghapus produk dari daftar keinginan menggunakan `product_uuid` yang " +"disediakan" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Tambahkan banyak produk ke daftar keinginan" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Menambahkan banyak produk ke daftar keinginan menggunakan `product_uuids` " +"yang disediakan" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Menghapus produk dari pesanan" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Menghapus banyak produk dari daftar keinginan menggunakan `product_uuids` " +"yang disediakan" + +#: 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" +"• **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" +"`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" +"Contoh: \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 +msgid "list all products (simple view)" +msgstr "Daftar semua produk (tampilan sederhana)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Mengambil satu produk (tampilan detail)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "" +"Menulis ulang produk yang sudah ada, mempertahankan bidang yang tidak dapat " +"diedit" + +#: 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 "" +"Memperbarui beberapa bidang dari produk yang sudah ada, mempertahankan " +"bidang yang tidak dapat diedit" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Menghapus produk" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "mencantumkan semua umpan balik yang diizinkan untuk suatu produk" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Mengembalikan cuplikan data meta SEO produk" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Daftar semua alamat" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Mengambil satu alamat" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Membuat alamat baru" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Menghapus alamat" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Memperbarui seluruh alamat" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Memperbarui sebagian alamat" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +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" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "membatasi jumlah hasil, 1 " +msgstr "{name} tidak ada dengan kueri <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Kode promosi tidak ada" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Anda hanya dapat membeli produk fisik dengan alamat pengiriman yang " +"ditentukan!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Alamat tidak ada" + +#: 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 "" +"Anda tidak dapat membeli saat ini, silakan coba lagi dalam beberapa menit." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Nilai gaya tidak valid" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Anda tidak dapat membeli pesanan kosong!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama " +"pelanggan, email pelanggan, nomor telepon pelanggan" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Metode pembayaran tidak valid: {payment_method} dari " +"{available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Mengelola umpan balik pengguna untuk produk. Kelas ini dirancang untuk " +"menangkap dan menyimpan umpan balik pengguna untuk produk tertentu yang " +"telah mereka beli. Kelas ini berisi atribut untuk menyimpan komentar " +"pengguna, referensi ke produk terkait dalam pesanan, dan peringkat yang " +"ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk " +"memodelkan dan mengelola data umpan balik secara efektif." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "" +"Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk" + +#: engine/core/models.py:1712 +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" +msgstr "Merujuk ke produk tertentu sesuai dengan urutan umpan balik ini" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Produk pesanan terkait" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Peringkat yang ditetapkan pengguna untuk produk" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Peringkat produk" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Mewakili produk yang terkait dengan pesanan dan atributnya. Model " +"OrderProduct menyimpan informasi tentang produk yang merupakan bagian dari " +"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 " +"URL unduhan untuk produk digital. Model ini terintegrasi dengan model " +"Pesanan dan Produk dan menyimpan referensi ke keduanya." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" +"Harga yang dibayarkan oleh pelanggan untuk produk ini pada saat pembelian" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Harga pembelian pada saat pemesanan" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Komentar internal untuk admin tentang produk yang dipesan ini" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Komentar internal" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Pemberitahuan pengguna" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Representasi JSON dari atribut item ini" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Atribut produk yang dipesan" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Referensi ke pesanan induk yang berisi produk ini" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Urutan induk" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Produk spesifik yang terkait dengan baris pesanan ini" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Jumlah produk spesifik ini dalam pesanan" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Kuantitas produk" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Status saat ini dari produk ini dalam pesanan" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status lini produk" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Pesananproduk harus memiliki pesanan terkait!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" +"Anda tidak dapat memberikan umpan balik atas pesanan yang tidak diterima" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Nama" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL integrasi" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Kredensial otentikasi" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Anda hanya dapat memiliki satu penyedia CRM default" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Tautan CRM pesanan" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Tautan CRM Pesanan" + +#: engine/core/models.py:1947 +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." +msgstr "" +"Mewakili fungsionalitas pengunduhan untuk aset digital yang terkait dengan " +"pesanan. Kelas DigitalAssetDownload menyediakan kemampuan untuk mengelola " +"dan mengakses unduhan yang terkait dengan produk pesanan. Kelas ini " +"menyimpan informasi tentang produk pesanan terkait, jumlah unduhan, dan " +"apakah aset tersebut dapat dilihat oleh publik. Kelas ini mencakup metode " +"untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam " +"status selesai." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Unduh" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Unduhan" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"Anda harus memberikan komentar, penilaian, dan memesan produk uuid untuk " +"menambahkan umpan balik." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Beranda" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Hubungi Kami" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Tentang Kami" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Bauran pelanggan (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Pelanggan baru" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Pelanggan yang kembali" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Tidak ada aktivitas nasabah dalam 30 hari terakhir." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Penjualan harian" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Pesanan (SELESAI)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Pendapatan kotor" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Pesanan" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Kotor" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Dasbor" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Ikhtisar pendapatan" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Pendapatan bersih" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Pajak" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Pengembalian" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Pendapatan kotor" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Tidak ada tanggal" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Pendapatan bersih" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Tingkat pengembalian dana" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Kembali" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Stok rendah" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Tidak ada stok barang yang rendah." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Sebagian besar produk yang dikembalikan (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Tidak ada pengembalian dalam 30 hari terakhir." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Produk yang paling diharapkan" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Belum ada data." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Produk paling populer" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Tautan Cepat" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Tidak ada tautan yang tersedia." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Dikirim vs Digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Dikirim" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Kategori teratas berdasarkan kuantitas (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Tidak ada penjualan kategori dalam 30 hari terakhir." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Admin situs Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Konfirmasi Pesanan" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Halo %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Terima kasih atas pesanan Anda #%(order.pk)s! Dengan senang hati kami " +"informasikan bahwa kami telah mengerjakan pesanan Anda. Di bawah ini adalah " +"rincian pesanan Anda:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Total" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Total Harga" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi dukungan kami " +"di %(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Salam hormat, tim %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Semua hak cipta dilindungi undang-undang" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Pesanan Dikirim" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Halo %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Kami telah berhasil memproses pesanan Anda №%(order_uuid)s! Di bawah ini " +"adalah rincian pesanan Anda:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"tambahan\n" +" informasi" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Nilai" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +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 dukungan kami " +"di %(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Salam hormat, tim %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Kunci" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Tambahkan Baris" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Kode promosi diberikan" + +#: engine/core/templates/promocode_granted_email.html:101 +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" +" 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" +" the details of your order:" +msgstr "" +"Terima kasih atas pesanan Anda! Dengan senang hati kami mengkonfirmasi " +"pembelian Anda. Di bawah ini adalah rincian pesanan Anda:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Harga pengiriman" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Pesanan Anda akan dikirimkan ke alamat berikut:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Salam hormat, Tim %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"Semua hak cipta\n" +" dilindungi undang-undang" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Data dan batas waktu diperlukan" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | hubungi kami dimulai" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | konfirmasi pesanan" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | pesanan terkirim" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Anda tidak memiliki izin untuk melakukan tindakan ini." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Parameter NOMINATIM_URL harus dikonfigurasi!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"Menangani permintaan indeks peta situs dan mengembalikan respons XML. " +"Memastikan respons menyertakan header jenis konten yang sesuai untuk XML." + +#: engine/core/views.py:106 +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 "" +"Menangani respons tampilan detail untuk peta situs. Fungsi ini memproses " +"permintaan, mengambil respons detail peta situs yang sesuai, dan menetapkan " +"header Jenis Konten untuk XML." + +#: engine/core/views.py:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "Mengembalikan daftar bahasa yang didukung dan informasi terkait." + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Mengembalikan parameter situs web sebagai objek JSON." + +#: engine/core/views.py:192 +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." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Menangani pengiriman formulir `hubungi kami`." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Menangani permintaan untuk memproses dan memvalidasi URL dari permintaan " +"POST yang masuk." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Menangani kueri penelusuran global." + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." + +#: engine/core/views.py:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid diperlukan" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "produk pesanan tidak ada" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Anda hanya dapat mengunduh aset digital sekali saja" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "pesanan harus dibayar sebelum mengunduh aset digital" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "Produk pesanan tidak memiliki produk" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon tidak ditemukan" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Mengalihkan permintaan ke halaman indeks admin. Fungsi ini menangani " +"permintaan HTTP yang masuk dan mengalihkannya ke halaman indeks antarmuka " +"admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk " +"menangani pengalihan HTTP." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Mengembalikan versi eVibes saat ini." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Pendapatan & Pesanan (terakhir %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Mendefinisikan sebuah viewset untuk mengelola operasi terkait Evibes. Kelas " +"EvibesViewSet diwarisi dari ModelViewSet dan menyediakan fungsionalitas " +"untuk menangani tindakan dan operasi pada entitas Evibes. Ini termasuk " +"dukungan untuk kelas serializer dinamis berdasarkan tindakan saat ini, izin " +"yang dapat disesuaikan, dan format rendering." + +#: 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." +msgstr "" +"Mewakili sebuah viewset untuk mengelola objek AttributeGroup. Menangani " +"operasi yang terkait dengan AttributeGroup, termasuk pemfilteran, " +"serialisasi, dan pengambilan data. Kelas ini merupakan bagian dari lapisan " +"API aplikasi dan menyediakan cara standar untuk memproses permintaan dan " +"respons untuk data AttributeGroup." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Menangani operasi yang terkait dengan objek Atribut di dalam aplikasi. " +"Menyediakan sekumpulan titik akhir API untuk berinteraksi dengan data " +"Atribut. Kelas ini mengelola kueri, pemfilteran, dan serialisasi objek " +"Atribut, yang memungkinkan kontrol dinamis atas data yang dikembalikan, " +"seperti pemfilteran berdasarkan bidang tertentu atau mengambil informasi " +"yang terperinci versus yang disederhanakan tergantung pada permintaan." + +#: 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." +msgstr "" +"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:213 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +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." + +#: 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 "" +"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." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"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 " +"`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 " +"terkait produk." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Merupakan kumpulan tampilan untuk mengelola objek Vendor. Viewset ini " +"memungkinkan pengambilan, pemfilteran, dan serialisasi data Vendor. Ini " +"mendefinisikan queryset, konfigurasi filter, dan kelas serializer yang " +"digunakan untuk menangani tindakan yang berbeda. Tujuan dari kelas ini " +"adalah untuk menyediakan akses yang efisien ke sumber daya yang berhubungan " +"dengan Vendor melalui kerangka kerja Django REST." + +#: 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 " +"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 " +"yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan " +"menggunakan sistem penyaringan Django untuk meminta data." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet untuk mengelola pesanan dan operasi terkait. Kelas ini menyediakan " +"fungsionalitas untuk mengambil, memodifikasi, dan mengelola objek pesanan. " +"Kelas ini mencakup berbagai titik akhir untuk menangani operasi pesanan " +"seperti menambah atau menghapus produk, melakukan pembelian untuk pengguna " +"yang terdaftar maupun yang tidak terdaftar, dan mengambil pesanan yang " +"tertunda dari pengguna yang diautentikasi saat ini. ViewSet menggunakan " +"beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " +"memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"Menyediakan viewset untuk mengelola entitas OrderProduct. Viewset ini " +"memungkinkan operasi CRUD dan tindakan khusus yang spesifik untuk model " +"OrderProduct. Ini termasuk pemfilteran, pemeriksaan izin, dan pengalihan " +"serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " +"tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " +"tindakan API." + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "Merupakan set tampilan untuk mengelola promosi." + +#: 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: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 " +"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 " +"diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " +"keinginan mereka sendiri kecuali jika izin eksplisit diberikan." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"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:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Kesalahan pengodean geografis: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Menangani operasi yang terkait dengan Tag Produk dalam aplikasi. Kelas ini " +"menyediakan fungsionalitas untuk mengambil, memfilter, dan menserialisasi " +"objek Tag Produk. Kelas ini mendukung pemfilteran fleksibel pada atribut " +"tertentu menggunakan backend filter yang ditentukan dan secara dinamis " +"menggunakan serializer yang berbeda berdasarkan tindakan yang dilakukan." diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.mo b/engine/core/locale/it_IT/LC_MESSAGES/django.mo new file mode 100644 index 00000000..b27b7c61 Binary files /dev/null and b/engine/core/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.po b/engine/core/locale/it_IT/LC_MESSAGES/django.po new file mode 100644 index 00000000..1ea70d2f --- /dev/null +++ b/engine/core/locale/it_IT/LC_MESSAGES/django.po @@ -0,0 +1,3536 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: it-it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "ID univoco" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"L'ID univoco viene utilizzato per identificare con certezza qualsiasi " +"oggetto del database." + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "È attivo" + +#: engine/core/abstract.py:21 +msgid "" +"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." + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Creato" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Quando l'oggetto è apparso per la prima volta nel database" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modificato" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Quando l'oggetto è stato modificato per l'ultima volta" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Traduzioni" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Generale" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relazioni" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "informazioni aggiuntive" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadati" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Timestamp" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Gli articoli selezionati sono stati attivati!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Gli articoli selezionati sono stati disattivati!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Valori degli attributi" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Immagine" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Immagini" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stock" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Le scorte" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Ordina il prodotto" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "I bambini" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Configurazione" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Nucleo" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Finito" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Consegnare" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Consegnato" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Annullato" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Fallito" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "In attesa" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Accettato" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Denaro restituito" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Pagamento" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momentale" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Successo" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Schema OpenAPI nel formato selezionato con la lingua selezionata" + +#: engine/core/docs/drf/views.py:33 +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 "" +"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:37 +msgid "cache I/O" +msgstr "I/O della cache" + +#: engine/core/docs/drf/views.py:46 +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 "" +"Applicare solo una chiave per leggere i dati consentiti dalla cache.\n" +"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" +msgstr "Ottenere un elenco delle lingue supportate" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Ottenere i parametri esponibili dell'applicazione" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Richiedere un URL CORSed. È consentito solo https." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Ricerca tra prodotti, categorie e marchi" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Endpoint di ricerca globale per interrogare tutte le tabelle del progetto" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Acquistare un ordine come azienda" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Acquistare un ordine come azienda, utilizzando i `prodotti` forniti con " +"`product_uuid` e `attributi`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "scaricare un bene digitale da un ordine digitale acquistato" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Elenco di tutti i gruppi di attributi (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Recuperare un singolo gruppo di attributi (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Creare un gruppo di attributi" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Cancellare un gruppo di attributi" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +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" +msgstr "" +"Riscrivere alcuni campi di un gruppo di attributi esistente salvando quelli " +"non modificabili" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Elenco di tutti gli attributi (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Recuperare un singolo attributo (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Creare un attributo" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Cancellare un attributo" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Riscrivere un attributo esistente salvando gli elementi non modificabili" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Riscrivere alcuni campi di un attributo esistente salvando i campi non " +"modificabili" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Elenco di tutti i valori degli attributi (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Recuperare il valore di un singolo attributo (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Creare un valore di attributo" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Cancellare il valore di un attributo" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Riscrivere il valore di un attributo esistente salvando gli elementi non " +"modificabili" + +#: engine/core/docs/drf/viewsets.py:186 +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" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Elenco di tutte le categorie (visualizzazione semplice)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Recuperare una singola categoria (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "UUID o slug della categoria" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Creare una categoria" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Eliminare una categoria" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "Meta-immagine SEO" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Restituisce un'istantanea dei meta-dati SEO della categoria." + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Elenco di tutte le categorie (visualizzazione semplice)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Per gli utenti che non fanno parte del personale, vengono restituiti solo i " +"loro ordini." + +#: 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" +msgstr "" +"Ricerca di sottostringhe senza distinzione di maiuscole e minuscole tra " +"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" +msgstr "Filtra gli ordini con buy_time >= questa data ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtra gli ordini con buy_time <= questa data ISO 8601" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrare per UUID dell'ordine esatto" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtrare in base all'ID esatto dell'ordine leggibile dall'uomo" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filtro per e-mail dell'utente (corrispondenza esatta senza distinzione tra " +"maiuscole e minuscole)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrare per UUID dell'utente" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filtrare per stato dell'ordine (corrispondenza di sottostringhe senza " +"distinzione tra maiuscole e minuscole)" + +#: 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')." +msgstr "" +"Ordinare per uno dei seguenti criteri: uuid, human_readable_id, user_email, " +"user, status, created, modified, buy_time, random. Prefisso con '-' per la " +"decrescita (ad esempio, '-buy_time')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Recuperare una singola categoria (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "UUID dell'ordine o id leggibile dall'uomo" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Creare un attributo" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Non funziona per gli utenti che non fanno parte del personale." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Cancellare un attributo" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Prezzo di acquisto al momento dell'ordine" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"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." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "recuperare l'ordine in corso di un utente" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "acquistare un ordine senza creare un account" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finalizza l'acquisto dell'ordine per un utente non registrato." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Aggiungere un prodotto all'ordine" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Aggiunge un prodotto a un ordine utilizzando il `product_uuid` e gli " +"`attributi` forniti." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" +"Aggiungete un elenco di prodotti da ordinare, le quantità non vengono " +"conteggiate" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Aggiunge un elenco di prodotti a un ordine, utilizzando il `product_uuid` e " +"gli `attributi` forniti." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Rimuovere un prodotto dall'ordine" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Rimuove un prodotto da un ordine utilizzando il `product_uuid` e gli " +"`attributi` forniti." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" +"Rimuovete un prodotto dall'ordine, le quantità non verranno conteggiate" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Rimuove un elenco di prodotti da un ordine utilizzando il `product_uuid` e " +"gli `attributi` forniti." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +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." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Recuperare un singolo attributo (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Creare un attributo" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Non funziona per gli utenti che non fanno parte del personale." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Cancellare un attributo" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Riscrivere un attributo esistente salvando gli elementi non modificabili" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Riscrivere alcuni campi di un attributo esistente salvando i campi non " +"modificabili" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "recuperare la lista dei desideri in sospeso di un utente" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "recupera la lista dei desideri in corso di un utente autenticato" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Aggiungere un prodotto all'ordine" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Aggiunge un prodotto a una lista dei desideri utilizzando il `product_uuid` " +"fornito." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Rimuovere un prodotto dalla lista dei desideri" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Rimuove un prodotto da una wishlist utilizzando il `product_uuid` fornito." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Aggiungere molti prodotti alla lista dei desideri" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Aggiunge molti prodotti a una lista dei desideri utilizzando i " +"`product_uuids` forniti." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Rimuovere un prodotto dall'ordine" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Rimuove molti prodotti da una lista di desideri utilizzando i " +"`product_uuids` forniti." + +#: 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" +"• **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" +"`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" +"Esempi: \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 +msgid "list all products (simple view)" +msgstr "Elenco di tutti i prodotti (visualizzazione semplice)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" +"**Consentito:** uuid, rating, nome, slug, creato, modificato, prezzo, casuale" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Recuperare un singolo prodotto (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: 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 "" +"Aggiornare alcuni campi di un prodotto esistente, preservando i campi non " +"modificabili" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Eliminare un prodotto" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "elenca tutti i feedback consentiti per un prodotto" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Restituisce un'istantanea dei meta-dati SEO del prodotto." + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Elenco di tutti gli indirizzi" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Recuperare un singolo indirizzo" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Creare un nuovo indirizzo" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Cancellare un indirizzo" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Aggiornare un intero indirizzo" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Aggiornare parzialmente un indirizzo" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Inserimento automatico dell'indirizzo" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Stringa di query dei dati grezzi, da aggiungere ai dati dell'endpoint geo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "limita la quantità di risultati, 1 < limite < 10, default: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "elencare tutti i feedback (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "recuperare un singolo feedback (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "creare un feedback" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "eliminare un feedback" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "elencare tutte le relazioni ordine-prodotto (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "recuperare una singola relazione ordine-prodotto (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "creare una nuova relazione ordine-prodotto" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "sostituire una relazione ordine-prodotto esistente" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "aggiornare parzialmente una relazione ordine-prodotto esistente" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "eliminare una relazione ordine-prodotto" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Elenco di tutti i marchi (visualizzazione semplice)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Recuperare un singolo marchio (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID o slug del marchio" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Creare un marchio" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Eliminare un marchio" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Elenco di tutti i fornitori (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Recuperare un singolo fornitore (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Create a vendor" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Eliminare un fornitore" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Elenco di tutte le immagini dei prodotti (visualizzazione semplice)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Recuperare l'immagine di un singolo prodotto (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Creare un'immagine del prodotto" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Eliminare l'immagine di un prodotto" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Elenco di tutti i codici promozionali (visualizzazione semplice)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Recuperare un singolo codice promozionale (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Create a promo code" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Cancellare un codice promozionale" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Elenco di tutte le promozioni (visualizzazione semplice)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Recuperare una singola promozione (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Creare una promozione" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Eliminare una promozione" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Elenco di tutti i titoli (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Recuperare un singolo titolo (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Creare un record di magazzino" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Cancellare un record di magazzino" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Elenco di tutti i tag dei prodotti (vista semplice)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Recuperare un singolo tag di prodotto (vista dettagliata)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Creare un'etichetta di prodotto" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Eliminare un tag di prodotto" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" +"Riscrivere una categoria esistente salvando gli elementi non modificabili" + +#: 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" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Non è stato fornito alcun termine di ricerca." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Ricerca" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Nome" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Categorie" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Categorie Lumache" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tag" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Prezzo minimo" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Max Price" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "È attivo" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Marchio" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Attributi" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Quantità" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Lumaca" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "È digitale" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Includere le sottocategorie" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Includere prodotti ordinati personalmente" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Deve esserci una categoria_uuid per utilizzare il flag include_subcategories" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Ricerca (ID, nome del prodotto o numero di parte)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Acquistato dopo (incluso)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Acquistato prima (compreso)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Email dell'utente" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID utente" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Stato" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "ID leggibile dall'uomo" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Genitore" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Intera categoria (con o senza almeno 1 prodotto)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Livello" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID del prodotto" + +#: 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:41 +msgid "data to store in cache" +msgstr "Data to store in cache" + +#: 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:47 +msgid "cached data" +msgstr "Dati in cache" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Aggiungere un prodotto all'ordine" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Rimuovere tutti i prodotti dall'ordine" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Acquistare un ordine" + +#: 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: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}" + +#: 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:250 +msgid "remove/add" +msgstr "Rimuovi/Aggiungi" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Fornire il valore `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Aggiungere un prodotto all'ordine" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "Rimuovere un prodotto dall'ordine" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "Rimuovere un prodotto dall'ordine" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "Rimuovere un prodotto dall'ordine" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "Acquistare un ordine" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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" + +#: 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:573 +msgid "action must be either `add` or `remove`" +msgstr "L'azione deve essere `add` o `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Stringa di indirizzo originale fornita dall'utente" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} non esiste: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch: funziona a meraviglia" + +#: 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:95 +msgid "grouped attributes" +msgstr "Attributi raggruppati" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Gruppi di attributi" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Marche" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Categorie" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Tag per questa categoria" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Prodotti in questa categoria" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Venditori" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitudine (coordinata Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitudine (coordinata X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Come" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Rappresenta il feedback di un utente." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Feedback" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Indirizzo di fatturazione" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Prezzo totale dell'ordine" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Tutti i prodotti sono presenti nell'ordine digitale" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Transazioni per questo ordine" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Ordini" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL immagine" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Immagini del prodotto" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Feedback" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Gruppi di attributi" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Prezzo" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Quantità" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Numero di feedback" + +#: 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:484 +msgid "discount price" +msgstr "Prezzo scontato" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Prodotti" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Codici promozionali" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Prodotti in vendita" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promozioni" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Venditore" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Prodotto" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Prodotti desiderati" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Liste dei desideri" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Prodotti contrassegnati" + +#: 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:665 +msgid "tagged categories" +msgstr "Contrassegnato dalle categorie" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Tag delle categorie" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Nome del progetto" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Nome della società" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Indirizzo dell'azienda" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Numero di telefono dell'azienda" + +#: 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:681 +msgid "email host user" +msgstr "Utente host dell'e-mail" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Importo massimo per il pagamento" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Importo minimo per il pagamento" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Dati analitici" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Dati pubblicitari" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configurazione" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Codice lingua" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Nome della lingua" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Bandiera della lingua, se esiste :)" + +#: 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 +msgid "products search results" +msgstr "Risultati della ricerca dei prodotti" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Risultati della ricerca dei prodotti" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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. " +"Questo può essere utile per categorizzare e gestire meglio gli attributi in " +"un sistema complesso." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Genitore di questo gruppo" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Gruppo di attributi padre" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Nome del gruppo di attributi" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Gruppo di attributi" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Rappresenta un'entità fornitore in grado di memorizzare informazioni sui " +"fornitori esterni e sui loro requisiti di interazione. La classe Vendor " +"viene utilizzata per definire e gestire le informazioni relative a un " +"fornitore esterno. Memorizza il nome del venditore, i dettagli di " +"autenticazione richiesti per la comunicazione e la percentuale di markup " +"applicata ai prodotti recuperati dal venditore. Questo modello mantiene " +"anche metadati e vincoli aggiuntivi, rendendolo adatto all'uso in sistemi " +"che interagiscono con venditori terzi." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Memorizza le credenziali e gli endpoint necessari per la comunicazione API " +"del fornitore." + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Informazioni sull'autenticazione" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Definire il markup per i prodotti recuperati da questo fornitore" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Percentuale di ricarico del fornitore" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Nome del fornitore" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Nome del fornitore" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "file di risposta" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "risposta del venditore all'ultima elaborazione" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Percorso del file di integrazione del fornitore" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Percorso di integrazione" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Rappresenta un tag di prodotto utilizzato per classificare o identificare i " +"prodotti. La classe ProductTag è progettata per identificare e classificare " +"in modo univoco i prodotti attraverso una combinazione di un identificatore " +"di tag interno e di un nome di visualizzazione facile da usare. Supporta le " +"operazioni esportate attraverso i mixin e fornisce la personalizzazione dei " +"metadati per scopi amministrativi." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Identificatore interno dell'etichetta del prodotto" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Nome del tag" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Nome intuitivo per l'etichetta del prodotto" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Nome del tag" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Etichetta del prodotto" + +#: engine/core/models.py:229 +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 "" +"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." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "tag categoria" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "tag di categoria" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +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 " +"specificare il nome, la descrizione e la gerarchia delle categorie, nonché " +"di assegnare attributi come immagini, tag o priorità." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Caricare un'immagine che rappresenti questa categoria" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Categoria immagine" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" +"Definire una percentuale di ricarico per i prodotti di questa categoria" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Genitore di questa categoria per formare una struttura gerarchica" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Categoria di genitori" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Nome della categoria" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Indicare un nome per questa categoria" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Aggiungere una descrizione dettagliata per questa categoria" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Descrizione della categoria" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tag che aiutano a descrivere o raggruppare questa categoria" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Priorità" + +#: engine/core/models.py:438 +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." +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." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Nome del marchio" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Nome del marchio" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Caricare un logo che rappresenti questo marchio" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Immagine piccola del marchio" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Caricare un grande logo che rappresenti questo marchio" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Grande immagine del marchio" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Aggiungere una descrizione dettagliata del marchio" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Descrizione del marchio" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Categorie opzionali a cui questo marchio è associato" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"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." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Il venditore che fornisce questo stock di prodotti" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Venditore associato" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Prezzo finale al cliente dopo i ricarichi" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Prezzo di vendita" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Il prodotto associato a questa voce di magazzino" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Prodotto associato" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Il prezzo pagato al venditore per questo prodotto" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Prezzo di acquisto del fornitore" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Quantità disponibile del prodotto in magazzino" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Quantità in magazzino" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU assegnato dal fornitore per identificare il prodotto" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "SKU del venditore" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "File digitale associato a questo stock, se applicabile" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "File digitale" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Attributi del sistema" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Voci di magazzino" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Rappresenta un prodotto con attributi quali categoria, marca, tag, stato " +"digitale, nome, descrizione, numero di parte e slug. Fornisce proprietà di " +"utilità correlate per recuperare valutazioni, conteggio dei feedback, " +"prezzo, quantità e ordini totali. Progettata per essere utilizzata in un " +"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 " +"un'applicazione." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Categoria a cui appartiene questo prodotto" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Associare facoltativamente questo prodotto a un marchio" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Indica se il prodotto è consegnato in formato digitale" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Il prodotto è digitale" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Fornire un nome identificativo chiaro per il prodotto" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Nome del prodotto" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Aggiungere una descrizione dettagliata del prodotto" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Descrizione del prodotto" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Numero di parte per questo prodotto" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Numero di parte" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Unità di mantenimento delle scorte per questo prodotto" + +#: engine/core/models.py:720 +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 " +"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." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Gruppo di questo attributo" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Stringa" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Intero" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Galleggiante" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Booleano" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Oggetto" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Tipo di valore dell'attributo" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Tipo di valore" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Nome dell'attributo" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Nome dell'attributo" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "è filtrabile" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Quali attributi e valori possono essere utilizzati per filtrare questa " +"categoria." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +msgstr "" +"Rappresenta un valore specifico per un attributo collegato a un prodotto. " +"Collega l'\"attributo\" a un \"valore\" unico, consentendo una migliore " +"organizzazione e rappresentazione dinamica delle caratteristiche del " +"prodotto." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attributo di questo valore" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Il prodotto specifico associato al valore di questo attributo" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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 " +"specifici e di determinazione dell'ordine di visualizzazione. Include anche " +"una funzione di accessibilità con testo alternativo per le immagini." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "" +"Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Testo alt dell'immagine" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Caricare il file immagine per questo prodotto" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Immagine del prodotto" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Determina l'ordine di visualizzazione delle immagini" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Priorità del display" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Il prodotto che questa immagine rappresenta" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Immagini del prodotto" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"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 " +"per determinare gli articoli interessati dalla campagna." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Percentuale di sconto per i prodotti selezionati" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Percentuale di sconto" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Fornite un nome unico per questa promozione" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Nome della promozione" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Descrizione della promozione" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Selezionare i prodotti inclusi in questa promozione" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Prodotti inclusi" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promozione" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Rappresenta la lista dei desideri di un utente per memorizzare e gestire i " +"prodotti desiderati. La classe fornisce funzionalità per la gestione di una " +"collezione di prodotti, supportando operazioni quali l'aggiunta e la " +"rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di " +"più prodotti contemporaneamente." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Prodotti che l'utente ha contrassegnato come desiderati" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Utente che possiede questa wishlist" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Proprietario della lista dei desideri" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Lista dei desideri" + +#: engine/core/models.py:985 +msgid "" +"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." +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 " +"file documentari. Estende le funzionalità di mixin specifici e fornisce " +"ulteriori caratteristiche personalizzate." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documentario" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentari" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"Rappresenta un'entità indirizzo che include dettagli sulla posizione e " +"associazioni con un utente. Fornisce funzionalità per la memorizzazione di " +"dati geografici e di indirizzi e per l'integrazione con servizi di " +"geocodifica. Questa classe è progettata per memorizzare informazioni " +"dettagliate sull'indirizzo, compresi componenti come via, città, regione, " +"paese e geolocalizzazione (longitudine e latitudine). Supporta " +"l'integrazione con le API di geocodifica, consentendo la memorizzazione " +"delle risposte API grezze per un'ulteriore elaborazione o ispezione. La " +"classe consente inoltre di associare un indirizzo a un utente, facilitando " +"la gestione personalizzata dei dati." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Indirizzo del cliente" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Linea di indirizzo" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Via" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Distretto" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Città" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Regione" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Codice postale" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Paese" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Risposta JSON completa di geocoder per questo indirizzo" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Risposta JSON memorizzata dal servizio di geocodifica" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Indirizzo" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Indirizzi" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"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 " +"utilizzo. Include funzionalità per convalidare e applicare il codice " +"promozionale a un ordine, assicurando il rispetto dei vincoli." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Codice univoco utilizzato da un utente per riscattare uno sconto" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +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" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Importo fisso dello sconto" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Sconto percentuale" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Data di scadenza del codice promozionale" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Tempo di validità finale" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Data a partire dalla quale il codice promozionale è valido" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Ora di inizio validità" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Timestamp in cui è stato utilizzato il codice promozionale, vuoto se non " +"ancora utilizzato" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Timestamp d'uso" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Utente assegnato a questo codice promozionale, se applicabile" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Utente assegnato" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Codice promozionale" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Codici promozionali" + +#: engine/core/models.py:1150 +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." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Il codice promozionale è già stato utilizzato" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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 " +"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." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Codice promozionale opzionale applicato a questo ordine" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Codice promozionale applicato" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "L'indirizzo di spedizione utilizzato per questo ordine" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Indirizzo di spedizione" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Stato attuale dell'ordine nel suo ciclo di vita" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Stato dell'ordine" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Struttura JSON delle notifiche da mostrare agli utenti; nell'interfaccia " +"utente dell'amministratore viene utilizzata la visualizzazione a tabella." + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "L'utente che ha effettuato l'ordine" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Utente" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Acquista tempo" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Un identificatore leggibile dall'uomo per l'ordine" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "ID leggibile dall'uomo" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Ordine" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Un utente può avere un solo ordine pendente alla volta!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"Non è possibile aggiungere prodotti a un ordine che non sia in sospeso." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "" +"Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" + +#: 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 "Non è possibile rimuovere i prodotti da un ordine che non è in corso." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} non esiste con la query <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Il codice promozionale non esiste" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"È possibile acquistare solo prodotti fisici con indirizzo di spedizione " +"specificato!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "L'indirizzo non esiste" + +#: 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 "" +"In questo momento non è possibile acquistare, riprovare tra qualche minuto." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Valore di forza non valido" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Non è possibile acquistare un ordine vuoto!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Non è possibile acquistare un ordine senza un utente!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Un utente senza saldo non può acquistare con il saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Fondi insufficienti per completare l'ordine" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"non è possibile acquistare senza registrazione, si prega di fornire le " +"seguenti informazioni: nome del cliente, e-mail del cliente, numero di " +"telefono del cliente" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Metodo di pagamento non valido: {payment_method} da " +"{available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gestisce i feedback degli utenti per i prodotti. Questa classe è progettata " +"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." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Riferisce il prodotto specifico in un ordine di cui si tratta il feedback." + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Prodotto correlato all'ordine" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Valutazione del prodotto assegnata dall'utente" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Valutazione del prodotto" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Rappresenta i prodotti associati agli ordini e i loro attributi. Il modello " +"OrderProduct mantiene le informazioni su un prodotto che fa parte di un " +"ordine, compresi i dettagli come il prezzo di acquisto, la quantità, gli " +"attributi del prodotto e lo stato. Gestisce le notifiche per l'utente e gli " +"amministratori e gestisce operazioni come la restituzione del saldo del " +"prodotto o l'aggiunta di feedback. Questo modello fornisce anche metodi e " +"proprietà che supportano la logica aziendale, come il calcolo del prezzo " +"totale o la generazione di un URL di download per i prodotti digitali. Il " +"modello si integra con i modelli Ordine e Prodotto e memorizza un " +"riferimento ad essi." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" +"Il prezzo pagato dal cliente per questo prodotto al momento dell'acquisto." + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Prezzo di acquisto al momento dell'ordine" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Commenti interni" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Notifiche degli utenti" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Rappresentazione JSON degli attributi di questo elemento" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Attributi del prodotto ordinati" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Riferimento all'ordine padre che contiene questo prodotto" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Ordine dei genitori" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Il prodotto specifico associato a questa riga d'ordine" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Quantità di questo prodotto specifico nell'ordine" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Quantità di prodotto" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Stato attuale di questo prodotto nell'ordine" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Stato della linea di prodotti" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "L'ordine-prodotto deve avere un ordine associato!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Azione errata specificata per il feedback: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "non è possibile dare un riscontro a un ordine non ricevuto" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Nome" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL dell'integrazione" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Credenziali di autenticazione" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "È possibile avere un solo provider CRM predefinito" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Link al CRM dell'ordine" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Link al CRM degli ordini" + +#: engine/core/models.py:1947 +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." +msgstr "" +"Rappresenta la funzionalità di download degli asset digitali associati agli " +"ordini. La classe DigitalAssetDownload offre la possibilità di gestire e " +"accedere ai download relativi ai prodotti dell'ordine. Mantiene le " +"informazioni sul prodotto dell'ordine associato, il numero di download e se " +"l'asset è visibile pubblicamente. Include un metodo per generare un URL per " +"il download della risorsa quando l'ordine associato è in uno stato " +"completato." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Scaricare" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Scaricamento" + +#: engine/core/serializers/utility.py:89 +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." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Casa" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Contatto" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Chi siamo" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Mix di clienti (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nuovi clienti" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Clienti di ritorno" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Nessuna attività del cliente negli ultimi 30 giorni." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Vendite giornaliere" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Ordini (FINITO)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Ricavo lordo" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Ordini" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Cruscotto" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Panoramica delle entrate" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Ricavi netti" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Tasse" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Restituzioni" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Ricavo lordo" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Nessuna data" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Ricavi netti" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Tasso di rimborso" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Restituito" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Stock ridotto" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Nessun articolo a basso stock." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "I prodotti più restituiti (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Nessuna restituzione negli ultimi 30 giorni." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Il prodotto più desiderato" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Non ci sono ancora dati." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Il prodotto più popolare" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Collegamenti rapidi" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Nessun link disponibile." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Spedito vs. Digitale (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digitale" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Spedito" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Categorie principali per quantità (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Nessuna vendita di categoria negli ultimi 30 giorni." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Amministratore del sito Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Conferma dell'ordine" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hello %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Grazie per il vostro ordine #%(order.pk)s! Siamo lieti di informarla che " +"abbiamo preso in carico il suo ordine. Di seguito sono riportati i dettagli " +"del vostro ordine:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Totale" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Prezzo totale" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Cordiali saluti,
il team %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Tutti i diritti riservati" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Ordine consegnato" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hello %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Abbiamo elaborato con successo il suo ordine №%(order_uuid)s! Di seguito " +"sono riportati i dettagli del suo ordine:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"ulteriori\n" +" informazioni" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Valore" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +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." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Cordiali saluti,
il team %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Chiave" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Aggiungi riga" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Codice promozionale concesso" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Grazie per essere stati con noi! Vi abbiamo concesso un codice promozionale\n" +" per" + +#: 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" +" the details of your order:" +msgstr "" +"Grazie per il vostro ordine! Siamo lieti di confermare il suo acquisto. Di " +"seguito sono riportati i dettagli dell'ordine:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Prezzo di spedizione" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Il vostro ordine sarà consegnato al seguente indirizzo:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Cordiali saluti,
il team %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"tutti i diritti\n" +" riservato" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Sono richiesti sia i dati che il timeout" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" +"Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi." + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | contattaci iniziato" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | Conferma d'ordine" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | ordine consegnato" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Non si ha il permesso di eseguire questa azione." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Il parametro NOMINATIM_URL deve essere configurato!" + +#: engine/core/validators.py:19 +#, 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" + +#: engine/core/views.py:91 +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 "" +"Gestisce la richiesta per l'indice della sitemap e restituisce una risposta " +"XML. Assicura che la risposta includa l'intestazione del tipo di contenuto " +"appropriato per XML." + +#: engine/core/views.py:106 +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 "" +"Gestisce la risposta di visualizzazione dettagliata di una sitemap. Questa " +"funzione elabora la richiesta, recupera la risposta dettagliata della " +"sitemap e imposta l'intestazione Content-Type per XML." + +#: engine/core/views.py:141 +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:173 +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:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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:219 +msgid "Handles `contact us` form submissions." +msgstr "Gestisce l'invio del modulo `contatti`." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gestisce le richieste di elaborazione e validazione degli URL dalle " +"richieste POST in arrivo." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Gestisce le query di ricerca globali." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid è obbligatorio" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "ordine prodotto non esistente" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "È possibile scaricare l'asset digitale una sola volta" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Il prodotto dell'ordine non ha un prodotto" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon non trovata" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Reindirizza la richiesta alla pagina indice dell'amministrazione. La " +"funzione gestisce le richieste HTTP in arrivo e le reindirizza alla pagina " +"indice dell'interfaccia di amministrazione di Django. Utilizza la funzione " +"`redirect` di Django per gestire il reindirizzamento HTTP." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Restituisce la versione corrente di eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Entrate e ordini (ultimo %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +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." + +#: 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." +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 " +"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:175 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Gestisce le operazioni relative agli oggetti Attribute all'interno " +"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." + +#: 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." +msgstr "" +"Un insieme di viste per la gestione degli oggetti AttributeValue. Questo " +"insieme di viste fornisce funzionalità per elencare, recuperare, creare, " +"aggiornare e cancellare oggetti AttributeValue. Si integra con i meccanismi " +"del viewset di Django REST Framework e utilizza serializzatori appropriati " +"per le diverse azioni. Le funzionalità di filtraggio sono fornite da " +"DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Gestisce le viste per le operazioni relative alle categorie. La classe " +"CategoryViewSet è responsabile della gestione delle operazioni relative al " +"modello di categoria nel sistema. Supporta il recupero, il filtraggio e la " +"serializzazione dei dati delle categorie. L'insieme di viste applica anche " +"le autorizzazioni per garantire che solo gli utenti autorizzati possano " +"accedere a dati specifici." + +#: 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 "" +"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." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +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. " +"Include metodi per recuperare i dettagli del prodotto, applicare i permessi " +"e accedere ai feedback correlati di un prodotto." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +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 " +"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: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 " +"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 " +"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: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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet per la gestione degli ordini e delle operazioni correlate. Questa " +"classe fornisce funzionalità per recuperare, modificare e gestire gli " +"oggetti ordine. Include vari endpoint per gestire le operazioni relative " +"agli ordini, come l'aggiunta o la rimozione di prodotti, l'esecuzione di " +"acquisti per utenti registrati e non registrati e il recupero degli ordini " +"in sospeso dell'utente attualmente autenticato. Il ViewSet utilizza diversi " +"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: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 " +"feedback on OrderProduct instances" +msgstr "" +"Fornisce un insieme di viste per la gestione delle entità OrderProduct. " +"Questo insieme di viste consente operazioni CRUD e azioni personalizzate " +"specifiche per il modello OrderProduct. Include il filtraggio, il controllo " +"dei permessi e la commutazione del serializzatore in base all'azione " +"richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " +"sulle istanze di OrderProduct." + +#: 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." + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " +"varie azioni API." + +#: 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: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: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 " +"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 per la gestione delle operazioni della Lista dei desideri. Il " +"WishlistViewSet fornisce gli endpoint per interagire con la lista dei " +"desideri di un utente, consentendo il recupero, la modifica e la " +"personalizzazione dei prodotti all'interno della lista dei desideri. Questo " +"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." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"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:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Errore di geocodifica: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Gestisce le operazioni relative ai Tag prodotto all'interno " +"dell'applicazione. Questa classe fornisce funzionalità per recuperare, " +"filtrare e serializzare gli oggetti Tag prodotto. Supporta un filtraggio " +"flessibile su attributi specifici, utilizzando il backend del filtro " +"specificato e utilizzando dinamicamente diversi serializzatori in base " +"all'azione da eseguire." diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.mo b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo new file mode 100644 index 00000000..0a4782d8 Binary files /dev/null and b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.po b/engine/core/locale/ja_JP/LC_MESSAGES/django.po new file mode 100644 index 00000000..1b8ac8b9 --- /dev/null +++ b/engine/core/locale/ja_JP/LC_MESSAGES/django.po @@ -0,0 +1,3239 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: ja-jp\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "ユニークID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "アクティブ" + +#: engine/core/abstract.py:21 +msgid "" +"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" +msgstr "作成" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "そのオブジェクトが初めてデータベースに登場した時" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "変形" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "オブジェクトの最終編集日時" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "翻訳" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "一般" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "関係" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "追加情報" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "メタデータ" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "タイムスタンプ" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "選択した%(verbose_name_plural)sをアクティブにする" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "選択した項目がアクティブになりました!" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "選択された%(verbose_name_plural)sを非アクティブにする" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "選択されたアイテムは無効化されました!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "属性値" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "画像" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "画像" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "在庫" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "株式" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "商品のご注文" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "子供たち" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "コンフィグ" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "コア" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "終了" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "配達" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "配信" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "キャンセル" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "失敗" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "申請中" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "受諾" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "返金" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "支払い" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "モメンタル" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "成功" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "選択された言語と選択されたフォーマットのOpenAPIスキーマ" + +#: engine/core/docs/drf/views.py:33 +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 " +"とクエリパラメータで選択できる。" + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "キャッシュI/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"許可されたデータをキャッシュから読み出すには、キーのみを適用する。\n" +"キャッシュにデータを書き込むには、認証付きのキー、データ、タイムアウトを適用する。" + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "サポートされている言語のリストを取得する" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "アプリケーションの公開可能なパラメータを取得する" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "サポートチームにメッセージを送る" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "CORSされたURLを要求する。httpsのみ許可。" + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "商品、カテゴリー、ブランド間の検索" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "プロジェクト全体のテーブルを検索するグローバル検索エンドポイント" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "ビジネスとして注文を購入する" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "提供された `product` と `product_uuid` と `attributes` を使用して、ビジネスとして注文を購入する。" + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "購入したデジタル注文からデジタル資産をダウンロードする" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "すべての属性グループをリストアップ(シンプルビュー)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "単一の属性グループを取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "属性グループの作成" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "属性グループの削除" + +#: engine/core/docs/drf/viewsets.py:89 +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 "既存の属性グループのいくつかのフィールドを書き換え、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "すべての属性をリストアップ(シンプルな表示)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "単一の属性を取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "属性を作成する" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "属性を削除する" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "既存の属性を書き換える。" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "すべての属性値をリストアップ(シンプルビュー)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "単一の属性値を取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "属性値の作成" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "属性値の削除" + +#: engine/core/docs/drf/viewsets.py:179 +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 "既存の属性値のいくつかのフィールドを書き換え、編集不可能な値を保存する。" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "全カテゴリーを一覧表示(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "単一のカテゴリーを取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "カテゴリーUUIDまたはスラッグ" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "カテゴリーを作成する" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "カテゴリーの削除" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEOメタ・スナップショット" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "カテゴリのSEOメタデータのスナップショットを返します。" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "全カテゴリーを一覧表示(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"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" +msgstr "buy_time >= このISO 8601の日時を持つ注文をフィルタリングする。" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "buy_time <= このISO 8601の日付時間の注文をフィルタリングする。" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "正確な順序UUIDによるフィルタリング" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "人間が読み取れる正確な注文IDによるフィルタリング" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "ユーザーのEメールによるフィルタリング(大文字・小文字を区別しない完全一致)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "ユーザーのUUIDによるフィルタリング" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" +"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)" +msgstr "単一のカテゴリーを取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "注文UUIDまたは人間が読めるID" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "属性を作成する" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "スタッフ以外のユーザーには使えない。" + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "属性を削除する" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "注文時の購入価格" + +#: engine/core/docs/drf/viewsets.py:382 +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` " +"が使用された場合、トランザクションが開始されます。" + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "ユーザーの現在の保留中の注文を取得する" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "認証されたユーザーの現在の保留中の注文を取得します。" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "アカウントを作成せずに注文を購入する" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "は、未登録ユーザーの注文購入を確定します。" + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "注文に商品を追加する" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "指定した `product_uuid` と `attributes` を使用して、商品を注文に追加する。" + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "数量はカウントされません。" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "指定された `product_uuid` と `attributes` を使用して、注文に商品のリストを追加する。" + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "注文から商品を削除する" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "指定された `product_uuid` と `attributes` を使用して、注文から商品を削除する。" + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "注文から商品を削除すると、数量はカウントされません。" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "指定された `product_uuid` と `attributes` を用いて、注文から商品のリストを削除する。" + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "すべての属性をリストアップ(シンプルな表示)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "スタッフ以外のユーザーには、自分のウィッシュリストのみが返されます。" + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "単一の属性を取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "属性を作成する" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "スタッフ以外のユーザーには使えない。" + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "属性を削除する" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "既存の属性を書き換える。" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "ユーザの現在の保留中のウィッシュリストを取得する" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "認証されたユーザーの現在の保留中のウィッシュリストを取得します。" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "注文に商品を追加する" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "指定された `product_uuid` を使ってウィッシュリストに商品を追加する。" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "ウィッシュリストから商品を削除する" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "指定された `product_uuid` を使ってウィッシュリストから商品を削除します。" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "ウィッシュリストに多くの商品を追加する" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "指定された `product_uuids` を使ってウィッシュリストに多くの商品を追加する。" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "注文から商品を削除する" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `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" +"• **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" +"`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" +"例 \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 +msgid "list all products (simple view)" +msgstr "全商品を一覧表示(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "(正確には)製品UUID" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"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, 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)" +msgstr "単一の製品を取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "製品を作る" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新する。" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "製品を削除する" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "製品に対して許可されたすべてのフィードバックを一覧表示します。" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "商品のSEOメタデータのスナップショットを返します。" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "全住所のリスト" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "単一アドレスの取得" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "新しいアドレスを作成する" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "アドレスの削除" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "アドレス全体の更新" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "アドレスの一部更新" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +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 " +"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" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "結果を制限する, 1 < limit < 10, デフォルト: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "すべてのフィードバックを表示する(シンプルな表示)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "単一のフィードバックを取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "フィードバックを作成する" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "フィードバックを削除する" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "既存のフィードバックを書き換える。" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "すべての注文と商品の関係をリストアップする(シンプルビュー)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "単一の注文と商品の関係を取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "新しい注文と商品の関係を作る" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "既存の注文と商品の関係を置き換える" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "既存の注文と商品の関係を部分的に更新する" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "注文と商品の関係を削除する" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "すべてのブランドをリストアップ(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "単一ブランドの検索(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "ブランドUUIDまたはスラッグ" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "ブランドを作る" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "ブランドの削除" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "編集不可の既存ブランドをリライトする" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "編集不可能なフィールドを保存している既存ブランドのフィールドを書き換える。" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "全ベンダーのリスト(シンプルビュー)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "単一ベンダーの検索(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "ベンダーの作成" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "ベンダーの削除" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "既存のベンダーを書き換え、編集不可能な部分を保存する。" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "既存のベンダーのいくつかのフィールドを書き換えて、編集不可能なフィールドを保存する。" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "すべての商品画像を一覧表示(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "1枚の商品画像を取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "製品イメージの作成" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "商品画像を削除する" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "既存の商品画像を書き換え、編集不可能な部分を保存する。" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "既存の商品画像のいくつかのフィールドを書き換えて、編集不可能な部分を保存する。" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "すべてのプロモコードを一覧表示(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "単一のプロモコードを取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "プロモコードを作成する" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "プロモコードを削除する" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "既存のプロモコードを書き換え、編集不可のプロモコードを保存する" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "既存のプロモコードの一部のフィールドを書き換えて、編集不可能な部分を保存する。" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "すべてのプロモーションを一覧表示(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "単一のプロモーションを取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "プロモーションの作成" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "プロモーションの削除" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "既存のプロモーションを書き換える。" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "既存のプロモーションのいくつかのフィールドを書き換え、編集不可能な部分を保存する。" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "全銘柄リスト(シンプルビュー)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "単一銘柄の取得(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "ストックレコードの作成" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "ストックレコードの削除" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "既存のストックレコードを書き換え、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "編集不可能なフィールドを保存している既存のストックレコードの一部のフィールドを書き換える。" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "すべての商品タグを一覧表示(シンプル表示)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "単一の商品タグを取得する(詳細表示)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "商品タグの作成" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "商品タグの削除" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "既存の商品タグを書き換え、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "既存の商品タグの一部のフィールドを書き換えて、編集不可能な部分を保存する。" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "検索語はありません。" + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "検索" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "ユーユーアイディー" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "名称" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "カテゴリー" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "カテゴリー ナメクジ" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "タグ" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "最低価格" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "最高価格" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "アクティブ" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "ブランド" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "属性" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "数量" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "スラッグ" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "デジタル" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "サブカテゴリーを含む" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "個人注文商品を含む" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "検索(ID、製品名または部品番号)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "購入時期" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "以前に購入したもの(含む)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "ユーザーEメール" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "ユーザーUUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "ステータス" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "人間が読めるID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "親" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "レベル" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "製品UUID" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "キャッシュを探すキー、またはキャッシュにセットするキー" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "キャッシュに保存するデータ" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "キャッシュにデータをセットするタイムアウト時間(秒" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "キャッシュ・データ" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "リクエストされたURLからキャメル化されたJSONデータ" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "http(s)://で始まるURLのみが許可されます。" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "注文に商品を追加する" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "注文から商品を削除する" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "注文からすべての商品を削除する" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "注文する" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "注文商品のリストに対してアクションを実行する" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "削除/追加" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "ウィッシュリストの商品リストに対してアクションを実行する" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "wishlist_uuid`の値を指定してください。" + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "注文に商品を追加する" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "注文から商品を削除する" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "注文から商品を削除する" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "注文から商品を削除する" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "注文する" + +#: 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のような形式の文字列として送信してください。" + +#: engine/core/graphene/mutations.py:549 +msgid "add or delete a feedback for orderproduct" +msgstr "orderproductに対するフィードバックを追加または削除する。" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "アクションは `add` または `remove` のいずれかでなければならない!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "ユーザーが提供したオリジナルのアドレス文字列" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name}は存在しません:{uuid}が存在しません!" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "上限は1から10の間でなければならない" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - 魅力のように動作" + +#: 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:95 +msgid "grouped attributes" +msgstr "グループ化された属性" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "属性のグループ" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "ブランド" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "カテゴリー" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "このカテゴリのフィルタリングに使用できる属性と値。" + +#: 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:205 +msgid "tags for this category" +msgstr "このカテゴリのタグ" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "このカテゴリの製品" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "ベンダー" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "緯度(Y座標)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "経度(X座標)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "どのように" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "ユーザーからのフィードバックを表す。" + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "フィードバック" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "注文商品のリスト" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "請求先住所" + +#: 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:414 +msgid "total price of this order" +msgstr "この注文の合計金額" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "注文商品の総数量" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "ご注文の商品はすべてデジタルですか?" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "この注文の取引" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "受注状況" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "画像URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "製品画像" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "フィードバック" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "属性グループ" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "価格" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "数量" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "フィードバック数" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "個人注文のみの商品" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "割引価格" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "製品紹介" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "プロモコード" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "販売商品" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "プロモーション" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "ベンダー" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "製品" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "ウィッシュリスト掲載商品" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "ウィッシュリスト" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "タグ別アーカイブ" + +#: 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:665 +msgid "tagged categories" +msgstr "タグ別アーカイブ" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "カテゴリー' タグ" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "プロジェクト名" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "会社名" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "会社住所" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "会社電話番号" + +#: 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:681 +msgid "email host user" +msgstr "メールホストユーザー" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "支払限度額" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "最低支払額" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "分析データ" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "広告データ" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "構成" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "言語コード" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "言語名" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "言語フラグがある場合 :)" + +#: 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 +msgid "products search results" +msgstr "製品検索結果" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "製品検索結果" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"属性グループを表し、階層化することができます。このクラスは、属性グループの管理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利です。" + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "このグループの親" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "親属性グループ" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "属性グループ名" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "属性グループ" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティを表します。Vendor " +"クラスは、外部ベンダーに関連する情報を定義・管理するために使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りするシステムでの使用に適しています。" + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "認証情報" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "このベンダーから取得した商品のマークアップを定義する。" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "ベンダーのマークアップ率" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "このベンダーの名前" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "ベンダー名" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "レスポンスファイル" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "ベンダーの最終処理回答" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "ベンダーの統合ファイルパス" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "統合パス" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"製品を分類または識別するために使用される製品タグを表します。ProductTag " +"クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。" + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "商品タグの内部タグ識別子" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "タグ名" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "商品タグのユーザーフレンドリーな名前" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "タグ表示名" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "商品タグ" + +#: engine/core/models.py:229 +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 "" +"商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。" + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "カテゴリタグ" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "カテゴリータグ" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。" + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "このカテゴリーを表す画像をアップロードする" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "カテゴリーイメージ" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "このカテゴリの商品のマークアップ率を定義する" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "階層構造を形成するこのカテゴリの親" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "親カテゴリー" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "カテゴリー名" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "このカテゴリの名前を入力してください。" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "このカテゴリの詳細説明を追加する" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "カテゴリー説明" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "優先順位" + +#: engine/core/models.py:438 +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." +msgstr "" +"システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "ブランド名" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "ブランド名" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "このブランドを代表するロゴをアップロードする" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "小さなブランドイメージ" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "このブランドを象徴する大きなロゴをアップロードする" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "大きなブランドイメージ" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "ブランドの詳細な説明を加える" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "ブランド説明" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "このブランドが関連するオプション・カテゴリー" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "この製品の在庫を供給しているベンダー" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "関連ベンダー" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "マークアップ後の顧客への最終価格" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "販売価格" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "このストックエントリーに関連する製品" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "関連製品" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "この製品に対してベンダーに支払われた価格" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "ベンダーの購入価格" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "在庫数" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "在庫数" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "製品を識別するためにベンダーが割り当てたSKU" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "ベンダーのSKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "この銘柄に関連するデジタルファイル(該当する場合" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "デジタルファイル" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "システム属性" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "ストックエントリー" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"カテゴリ、ブランド、タグ、デジタルステータス、名前、説明、品番、スラッグなどの属性を持つ製品を表します。評価、フィードバック数、価格、数量、注文総数を取得するための関連ユーティリティ・プロパティを提供します。電子商取引や在庫管理を扱うシステムで使用するように設計されています。このクラスは、関連するモデル" +" (Category、Brand、ProductTag など) " +"と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "この製品が属するカテゴリ" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "オプションでこの製品をブランドと関連付ける" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "この商品の説明やグループ分けに役立つタグ" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "この製品がデジタル配信されるかどうかを示す" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "製品はデジタルか" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "製品の明確な識別名を提供する" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "商品名" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "商品の詳細説明を追加する" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "商品説明" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "この製品の品番" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "品番" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "この製品の在庫管理単位" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object" +" などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。" + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "この属性のグループ" + +#: engine/core/models.py:739 +msgid "string" +msgstr "ストリング" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "整数" + +#: engine/core/models.py:741 +msgid "float" +msgstr "フロート" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "ブーリアン" + +#: engine/core/models.py:743 +msgid "array" +msgstr "配列" + +#: engine/core/models.py:744 +msgid "object" +msgstr "対象" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "属性値のタイプ" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "値の種類" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "この属性の名前" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "属性名" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "フィルタリング可能" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "この属性がフィルタリングに使用できるかどうかを指定する。" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" +"製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。" + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "この値の属性" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "この属性の値に関連する特定の製品" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "アクセシビリティのために、画像に代替テキストを提供する。" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "画像のaltテキスト" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "この商品の画像ファイルをアップロードする" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "商品画像" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "画像の表示順を決める" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "表示優先度" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "この画像が表す製品" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "商品画像" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "選択した商品の割引率" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "割引率" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "このプロモーションのユニークな名前を入力してください。" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "プロモーション名" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "プロモーション内容" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "キャンペーン対象商品をお選びください。" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "含まれる製品" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "プロモーション" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "ユーザーが欲しいとマークした商品" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "このウィッシュリストを所有しているユーザー" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "ウィッシュリストのオーナー" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "ウィッシュリスト" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "ドキュメンタリー" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "ドキュメンタリー" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"場所の詳細とユーザーとの関連付けを含む住所エンティティを表します。地理データおよび住所データを保存する機能と、ジオコーディングサービスとの統合機能を提供します。このクラスは、street、city、region、country、geolocation" +" (longitude and latitude) のようなコンポーネントを含む詳細な住所情報を格納するように設計されています。ジオコーディング API" +" との統合をサポートしており、 生の API " +"レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " +"パーソナライズされたデータの取り扱いを容易にします。" + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "お客様の住所" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "住所" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "ストリート" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "地区" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "都市" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "地域" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "郵便番号" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "国名" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "ジオロケーションポイント(経度、緯度)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "この住所に対するジオコーダーからの完全なJSON応答" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "住所" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "住所" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"割引に使用できるプロモーションコードを表し、その有効期間、割引の種類、適用を管理します。PromoCode クラスは、一意の識別子、割引のプロパティ " +"(金額またはパーセンテージ)、有効期間、関連するユーザ " +"(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "ユーザーが割引を利用する際に使用する固有のコード" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "プロモコード識別子" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "パーセントを使用しない場合に適用される固定割引額" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "固定割引額" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "定額を使用しない場合に適用される割引率" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "割引率" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "プロモコードの有効期限が切れるタイムスタンプ" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "終了有効時間" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "このプロモコードが有効なタイムスタンプ" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "開始有効時間" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "使用タイムスタンプ" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "該当する場合、このプロモコードに割り当てられたユーザー" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "担当ユーザー" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "プロモコード" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "プロモコード" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "プロモコードはすでに使用されています" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "プロモコード {self.uuid} の割引タイプが無効です!" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "この注文に使用される請求先住所" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "この注文に適用されるプロモコード" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "プロモーションコード適用" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "この注文に使用された配送先住所" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "配送先住所" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "ライフサイクルにおける現在の注文状況" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "注文状況" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "この注文の注文属性のJSON表現" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "注文を行ったユーザー" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "ユーザー" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "注文が確定したタイムスタンプ" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "時間を買う" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "オーダーの人間が読み取り可能な識別子。" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "人間が読めるID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "オーダー" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "保留中の注文以外の注文に商品を追加することはできません。" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "アクティブでない商品を注文に追加することはできません。" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "保留中の注文以外の注文から商品を削除することはできません。" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name}はクエリ<{query}と一緒に存在しません!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "プロモコードが存在しない" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "配送先住所が指定された現物商品のみ購入可能!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "アドレスが存在しない" + +#: 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 "現在ご購入いただけません。数分後にもう一度お試しください。" + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "無効なフォース値" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "空注文はできません!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "ユーザーがいない注文は購入できない!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "残高のないユーザーは、残高で購入することはできない!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "注文を完了するための資金不足" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +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}が無効です!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "ユーザーから寄せられた製品使用体験に関するコメント" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "フィードバック・コメント" + +#: engine/core/models.py:1719 +msgid "" +"references the specific product in an order that this feedback is about" +msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "関連注文商品" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "ユーザーによる製品の評価" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "製品評価" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "この商品の購入時に顧客が支払った価格" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "注文時の購入価格" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "この注文商品に関する管理者への内部コメント" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "社内コメント" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "ユーザー通知" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "このアイテムの属性のJSON表現" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "製品属性の順序" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "この商品を含む親注文への参照" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "親注文" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "この注文ラインに関連する特定の製品" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "注文に含まれる特定の商品の数量" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "製品数量" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "この商品の現在のご注文状況" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "製品ラインの状況" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproductには関連する注文がなければならない!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "フィードバックに指定されたアクションが間違っています:{action}です!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "受信していない注文をフィードバックすることはできません。" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "名称" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "統合のURL" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "認証情報" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "デフォルトのCRMプロバイダーは1つだけです。" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "注文のCRMリンク" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "オーダーのCRMリンク" + +#: engine/core/models.py:1947 +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." +msgstr "" +"注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" +" URL を生成するメソッドも含まれています。" + +#: engine/core/models.py:1961 +msgid "download" +msgstr "ダウンロード" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "ダウンロード" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力する必要があります。" + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "ホーム" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "お問い合わせ" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "会社概要" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "顧客構成 (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "新規顧客" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "リピーター" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "過去30日間に顧客の活動がない。" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "デイリーセールス" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "オーダー(終了)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "総収入" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "受注状況" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "グロス" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "ダッシュボード" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "収入概要" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "純収入" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "税金" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "リターン" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "総収入" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "日付なし" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "純収入" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "払い戻し率" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "返品" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "在庫僅少" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "在庫の少ない商品はありません。" + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "最も返品された商品 (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "過去30日間返品なし。" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "最も欲しい製品" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "まだデータはない。" + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "最も人気のある製品" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "クイックリンク" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "リンクはありません。" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "出荷対デジタル (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "デジタル" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "出荷済み" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "数量上位カテゴリー (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "過去30日間にカテゴリー別売上なし。" + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Djangoサイト管理者" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "ご注文の確認" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "ロゴ" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "こんにちは%(order.user.first_name)s、" + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "ご注文ありがとうございます#%(order.pk)s!ご注文を承りましたことをお知らせいたします。以下、ご注文の詳細です:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "合計" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "合計価格" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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までお気軽にお問い合わせください。" + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "よろしくお願いします、
%(config.PROJECT_NAME)sチーム" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "無断複写・転載を禁じます。" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "注文の配達" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "こんにちは%(user_first_name)s、" + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "ご注文の№%(order_uuid)sが正常に処理されました!以下はご注文の詳細です:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"追加\n" +" 追加情報" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "価値" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "ご不明な点がございましたら、%(contact_email)sまでお気軽にお問い合わせください。" + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "よろしくお願いします、
%(project_name)sチーム" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "キー" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "行を追加" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "プロモーションコード" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"ご宿泊ありがとうございます!プロモーションコード\n" +" を付与させていただきました。" + +#: 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" +" the details of your order:" +msgstr "ご注文ありがとうございます!ご購入を確認させていただきました。以下、ご注文の詳細です:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "送料" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "ご注文の商品は以下の住所に配送されます:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "よろしくお願いします、
%(config.PROJECT_NAME)sチーム" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"すべての権利\n" +" 予約済み" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "データとタイムアウトの両方が必要" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "無効なタイムアウト値です。" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME}|注文確認| 注文確認" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME}|注文を配信" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "この操作を行う権限がありません。" + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "NOMINATIM_URLパラメータを設定する必要があります!" + +#: engine/core/validators.py:19 +#, 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} ピクセルを超えないようにしてください!" + +#: engine/core/views.py:91 +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:106 +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 "" +"サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-" +"Type ヘッダを設定します。" + +#: engine/core/views.py:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "サポートされている言語の一覧と対応する情報を返します。" + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "ウェブサイトのパラメータをJSONオブジェクトとして返します。" + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。" + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "お問い合わせフォームの送信を処理する。" + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "グローバル検索クエリを処理する。" + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "登録なしでビジネスとして購入するロジックを扱う。" + +#: engine/core/views.py:332 +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." +msgstr "" +"注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" +"この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuidは必須です。" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "注文商品が存在しない" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "デジタルアセットのダウンロードは1回限りです。" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "注文商品に商品がない" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "ファビコンが見つかりません" + +#: engine/core/views.py:404 +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." +msgstr "" +"ウェブサイトのファビコンへのリクエストを処理します。\n" +"この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" + +#: engine/core/views.py:416 +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 "" +"リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " +"インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "eVibes の現在のバージョンを返します。" + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "収益と受注 (最終 %(days)d)" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "ダッシュボードのカスタム変数を返します。" + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Evibes 関連の操作を管理するためのビューセットを定義します。EvibesViewSet クラスは ModelViewSet を継承し、Evibes" +" エンティティに対する アクションや操作を扱うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラスのサポート、 " +"カスタマイズ可能なパーミッション、レンダリングフォーマットが含まれます。" + +#: 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." +msgstr "" +"AttributeGroup " +"オブジェクトを管理するためのビューセットを表します。データのフィルタリング、シリアライズ、取得など、AttributeGroup " +"に関連する操作を処理します。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroupデータの要求と応答を処理する標準化された方法を提供します。" + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"アプリケーション内でAttributeオブジェクトに関連する操作を処理する。Attribute データと対話するための API " +"エンドポイントのセットを提供します。このクラスは、Attribute " +"オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化された情報の取得など、返されるデータの動的な制御を可能にします。" + +#: 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." +msgstr "" +"AttributeValue オブジェクトを管理するためのビューセットです。このビューセットは、 AttributeValue " +"オブジェクトの一覧表示、取得、作成、更新、削除の機能を提供し ます。Django REST Framework " +"のビューセット機構と統合され、異なるアクションに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend " +"を通して提供されます。" + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制します。" + +#: 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 "" +"Brandインスタンスを管理するためのビューセットを表します。このクラスは Brand " +"オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django の ViewSet フレームワークを使い、 Brand " +"オブジェクトの API エンドポイントの実装を簡素化します。" + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"システム内の `Product` " +"モデルに関連する操作を管理する。このクラスは、商品のフィルタリング、シリアライズ、特定のインスタンスに対する操作など、商品を管理するためのビューセットを提供します。共通の機能を使うために" +" `EvibesViewSet` を継承し、 RESTful API 操作のために Django REST " +"フレームワークと統合しています。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィードバックにアクセスするためのメソッドを含みます。" + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Vendor オブジェクトを管理するためのビューセットを表します。このビューセットを使用すると、 Vendor " +"のデータを取得したりフィルタリングしたりシリアライズしたりすることができます。さまざまなアクションを処理するためのクエリセット、 " +"フィルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フレームワークを通して Vendor " +"関連リソースへの合理的なアクセスを提供することです。" + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"Feedback オブジェクトを扱うビューセットの表現。このクラスは、一覧表示、フィルタリング、詳細の取得など、Feedback " +"オブジェクトに関する操作を管理します。このビューセットの目的は、アクションごとに異なるシリアライザを提供し、アクセス可能な Feedback " +"オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django " +"のフィルタリングシステムを利用してデータを取得します。" + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"注文と関連する操作を管理するための " +"ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"OrderProduct エンティティを管理するためのビューセットを提供します。このビューセットは、OrderProduct モデルに固有の CRUD " +"操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" +" インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "アプリケーション内の商品画像に関する操作を管理します。" + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "プロモーションを管理するためのビューセットを表します。" + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "システム内のストックデータに関する操作を行う。" + +#: 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 " +"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は、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"このクラスは `Address` オブジェクトを管理するためのビューセット機能を提供する。AddressViewSet " +"クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " +"メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "ジオコーディングエラー:{e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"アプリケーション内で商品タグに関連する操作を処理します。このクラスは、商品タグオブジェクトの取得、フィルタリング、シリアライズの機能を提供します。指定されたフィルタバックエンドを使用して特定の属性に対する柔軟なフィルタリングをサポートし、実行されるアクションに基づいて動的に異なるシリアライザを使用します。" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.mo b/engine/core/locale/kk_KZ/LC_MESSAGES/django.mo similarity index 92% rename from core/locale/kk_KZ/LC_MESSAGES/django.mo rename to engine/core/locale/kk_KZ/LC_MESSAGES/django.mo index 0fc354f2..7640ce00 100644 Binary files a/core/locale/kk_KZ/LC_MESSAGES/django.mo and b/engine/core/locale/kk_KZ/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po new file mode 100644 index 00000000..2898d6a5 --- /dev/null +++ b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -0,0 +1,3138 @@ +# EVIBES GETTEXT TRANSLATIONS +# 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-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-06-16 08:59+0100\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "" + +#: engine/core/abstract.py:21 +msgid "" +"if set to false, this object can't be seen by users without needed permission" +msgstr "" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "" + +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 +msgid "failed" +msgstr "" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "" + +#: engine/core/docs/drf/views.py:33 +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 "" + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "" + +#: engine/core/docs/drf/views.py:46 +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" +msgstr "" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "" + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:89 +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 "" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:179 +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 "" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:430 +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" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" + +#: 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" +"• **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" +"`b64-description=icontains-aGVhdC1jb2xk`" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"Comma-separated list of fields to sort by. Prefix with `-` for " +"descending. \n" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "" + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "" + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "" + +#: 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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "" + +#: engine/core/graphene/mutations.py:576 +#, python-brace-format +msgid "order product {order_product_uuid} not found" +msgstr "" + +#: engine/core/graphene/mutations.py:582 +msgid "original address string provided by the user" +msgstr "" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "" + +#: 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:95 +msgid "grouped attributes" +msgstr "" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "" + +#: 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:205 +msgid "tags for this category" +msgstr "" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "" + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "" + +#: 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:414 +msgid "total price of this order" +msgstr "" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "" + +#: 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:665 +msgid "tagged categories" +msgstr "" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "" + +#: 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:681 +msgid "email host user" +msgstr "" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "" + +#: 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 +msgid "products search results" +msgstr "" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "" + +#: engine/core/models.py:229 +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 "" + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "" + +#: engine/core/models.py:438 +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." +msgstr "" + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "" + +#: engine/core/models.py:739 +msgid "string" +msgstr "" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "" + +#: engine/core/models.py:741 +msgid "float" +msgstr "" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "" + +#: engine/core/models.py:743 +msgid "array" +msgstr "" + +#: engine/core/models.py:744 +msgid "object" +msgstr "" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "" + +#: engine/core/models.py:1150 +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" +msgstr "" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "" + +#: 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 "" + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "" + +#: engine/core/models.py:1575 +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 "" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "" + +#: engine/core/models.py:1719 +msgid "references the specific product in an order that this feedback is about" +msgstr "" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "" + +#: engine/core/models.py:1947 +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." +msgstr "" + +#: engine/core/models.py:1961 +msgid "download" +msgstr "" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "" + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "" + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +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" +" the details of your order:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | promocode granted" +msgstr "" + +#: engine/core/utils/messages.py:3 +msgid "you do not have permission to perform this action." +msgstr "" + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "" + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: engine/core/views.py:332 +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." +msgstr "" + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "" + +#: engine/core/views.py:404 +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." +msgstr "" + +#: engine/core/views.py:416 +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:429 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "" + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: 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." +msgstr "" + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: 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 "" + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: 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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.mo b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..1f0bf2b9 Binary files /dev/null and b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.po b/engine/core/locale/ko_KR/LC_MESSAGES/django.po new file mode 100644 index 00000000..cb773846 --- /dev/null +++ b/engine/core/locale/ko_KR/LC_MESSAGES/django.po @@ -0,0 +1,3269 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: ko-kr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "고유 ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "고유 ID는 모든 데이터베이스 개체를 확실하게 식별하는 데 사용됩니다." + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "활성 상태" + +#: engine/core/abstract.py:21 +msgid "" +"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" +msgstr "생성됨" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "개체가 데이터베이스에 처음 나타난 시점" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "수정됨" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "개체가 마지막으로 편집된 시기" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "번역" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "일반" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "관계" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "추가 정보" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "메타데이터" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "타임스탬프" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "선택한 %(verbose_name_plural)s 활성화" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "선택한 아이템이 활성화되었습니다!" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "선택한 %(verbose_name_plural)s 비활성화하기" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "선택한 아이템이 비활성화되었습니다!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "속성 값" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "이미지" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "이미지" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "재고" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "주식" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "제품 주문" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "어린이" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "구성" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "핵심" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "완료" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "제공" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "배달됨" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "취소됨" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "실패" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "보류 중" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "수락됨" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "반환된 금액" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "결제" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "순간" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "성공" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "선택한 언어와 선택한 형식의 OpenAPI 스키마" + +#: engine/core/docs/drf/views.py:33 +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 "" +"OpenApi3 스키마를 사용합니다. 형식은 콘텐츠 협상을 통해 선택할 수 있습니다. 언어는 Accept-Language와 쿼리 " +"매개변수를 모두 사용하여 선택할 수 있습니다." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "캐시 I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"캐시에서 허용된 데이터를 읽으려면 키만 적용합니다.\n" +"캐시에 데이터를 쓰기 위해 키, 데이터 및 타임아웃을 인증과 함께 적용합니다." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "지원되는 언어 목록 보기" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "애플리케이션의 노출 가능한 매개변수 가져오기" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "지원팀에 메시지 보내기" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "CORSed URL을 요청합니다. https만 허용됩니다." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "제품, 카테고리 및 브랜드 간 검색" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "프로젝트의 테이블 전체에서 쿼리할 수 있는 글로벌 검색 엔드포인트" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "비즈니스로 주문 구매" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "제공된 '제품'과 '제품_uuid' 및 '속성'을 사용하여 비즈니스로서 주문을 구매합니다." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "구매한 디지털 주문에서 디지털 자산 다운로드" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "모든 속성 그룹 나열(단순 보기)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "단일 속성 그룹 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "속성 그룹 만들기" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "속성 그룹 삭제" + +#: engine/core/docs/drf/viewsets.py:89 +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 "기존 속성 그룹의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "모든 속성 나열(단순 보기)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "단일 속성 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "속성 만들기" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "속성 삭제" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "편집할 수 없는 속성을 저장하는 기존 속성 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "편집할 수 없는 기존 속성의 일부 필드를 다시 작성합니다." + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "모든 속성 값 나열(단순 보기)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "단일 속성 값 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "속성 값 생성" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "속성 값 삭제" + +#: engine/core/docs/drf/viewsets.py:179 +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 "기존 속성 값의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "모든 카테고리 나열(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "단일 카테고리 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "카테고리 UUID 또는 슬러그" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "카테고리 만들기" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "카테고리 삭제" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO 메타 스냅샷" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "카테고리의 SEO 메타 데이터 스냅샷을 반환합니다." + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "모든 카테고리 나열(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"대소문자를 구분하지 않는 하위 문자열 검색(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" +msgstr "buy_time >= 이 ISO 8601 날짜 시간으로 주문 필터링" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "buy_time <= 이 ISO 8601 날짜 시간으로 주문 필터링" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "정확한 주문 UUID로 필터링" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "사람이 읽을 수 있는 정확한 주문 ID로 필터링" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "사용자 이메일로 필터링(대소문자를 구분하지 않는 일치 검색)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "사용자의 UUID로 필터링" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" +"uuid, human_readable_id, user_email, 사용자, 상태, 생성됨, 수정됨, 구매 시간, 무작위 중 하나로 " +"정렬합니다. 접두사 앞에 '-'를 붙여 내림차순으로 정렬합니다(예: '-buy_time')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "단일 카테고리 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "주문 UUID 또는 사람이 읽을 수 있는 ID" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "속성 만들기" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "직원이 아닌 사용자에게는 작동하지 않습니다." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "속성 삭제" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "주문 시점의 구매 가격" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"주문 구매를 완료합니다. 강제 잔액`을 사용하면 사용자의 잔액을 사용하여 구매가 완료되고, `강제 결제`를 사용하면 거래가 시작됩니다." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "사용자의 현재 대기 주문 검색하기" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "인증된 사용자의 현재 대기 주문을 검색합니다." + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "계정 생성 없이 주문 구매" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "미등록 사용자의 주문 구매를 완료합니다." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "주문에 제품 추가" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품을 추가합니다." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "주문할 제품 목록을 추가하면 수량은 계산되지 않습니다." + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품 목록을 추가합니다." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "주문에서 제품 제거" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품을 제거합니다." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "주문에서 제품을 제거하면 수량이 계산되지 않습니다." + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품 목록을 제거합니다." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "모든 속성 나열(단순 보기)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "직원이 아닌 사용자의 경우 자신의 위시리스트만 반환됩니다." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "단일 속성 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "속성 만들기" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "직원이 아닌 사용자에게는 작동하지 않습니다." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "속성 삭제" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "편집할 수 없는 속성을 저장하는 기존 속성 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "편집할 수 없는 기존 속성의 일부 필드를 다시 작성합니다." + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "사용자의 현재 보류 중인 위시리스트 검색" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "인증된 사용자의 현재 보류 중인 위시리스트를 검색합니다." + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "주문에 제품 추가" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "제공된 `product_uuid`를 사용하여 위시리스트에 제품을 추가합니다." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "위시리스트에서 제품 제거" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "제공된 `product_uuid`를 사용하여 위시리스트에서 제품을 제거합니다." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "위시리스트에 많은 제품 추가" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "제공된 `product_uuids`를 사용하여 위시리스트에 많은 제품을 추가합니다." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "주문에서 제품 제거" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `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" +"• **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" +"`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" +"예시: \n" +"색상=정확-빨간색`, `크기=gt-10`, `기능=in-[\"wifi\",\"블루투스\"]`,\n" +"b64-description=icontains-aGVhdC1jb2xk`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "모든 제품 나열(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "(정확한) 제품 UUID" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"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, 등급, 이름, 슬러그, 생성, 수정, 가격, 랜덤" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "단일 제품 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "제품 만들기" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "기존 제품의 일부 필드를 업데이트하여 편집할 수 없는 필드는 유지합니다." + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "제품 삭제" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "제품에 대해 허용된 모든 피드백을 나열합니다." + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "제품의 SEO 메타 데이터 스냅샷을 반환합니다." + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "모든 주소 나열" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "단일 주소 검색" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "새 주소 만들기" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "주소 삭제" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "전체 주소 업데이트" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "주소 부분 업데이트" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "주소 자동 완성 입력" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "원시 데이터 쿼리 문자열, 지오-IP 엔드포인트의 데이터를 추가하세요." + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "결과 금액을 제한합니다(1 < 제한 < 10, 기본값: 5)." + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "모든 피드백 나열(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "단일 피드백 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "피드백 만들기" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "피드백 삭제" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "편집할 수 없는 기존 피드백을 다시 작성합니다." + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "모든 주문-제품 관계 나열(단순 보기)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "단일 주문-제품 관계 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "새 주문-제품 관계 생성" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "기존 주문-제품 관계 교체" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "기존 주문-제품 관계를 부분적으로 업데이트합니다." + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "주문-제품 관계 삭제" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "모든 브랜드 나열(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "단일 브랜드 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "브랜드 UUID 또는 슬러그" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "브랜드 만들기" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "브랜드 삭제" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "편집할 수 없는 기존 브랜드를 저장하여 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "편집할 수 없는 항목을 저장하여 기존 브랜드의 일부 필드 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "모든 공급업체 목록(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "단일 공급업체 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "공급업체 만들기" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "공급업체 삭제" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "편집할 수 없는 기존 벤더를 저장하여 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "편집할 수 없는 기존 공급업체의 일부 필드 다시 작성" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "모든 제품 이미지 나열(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "단일 제품 이미지 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "제품 이미지 만들기" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "제품 이미지 삭제" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "편집할 수 없는 기존 제품 이미지 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "편집할 수 없는 기존 제품 이미지의 일부 필드를 다시 작성합니다." + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "모든 프로모션 코드 목록(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "단일 프로모션 코드 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "프로모션 코드 생성" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "프로모션 코드 삭제" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "편집할 수 없는 기존 프로모션 코드 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "편집할 수 없는 기존 프로모션 코드의 일부 필드를 다시 작성합니다." + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "모든 프로모션 목록(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "단일 프로모션 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "프로모션 만들기" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "프로모션 삭제" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션의 일부 필드 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "모든 종목 목록(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "단일 재고 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "재고 기록 만들기" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "재고 기록 삭제" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "편집할 수 없는 항목을 저장하여 기존 재고 레코드 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "편집할 수 없는 항목을 저장하는 기존 재고 레코드의 일부 필드 다시 쓰기" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "모든 제품 태그 나열(간편 보기)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "단일 제품 태그 검색(상세 보기)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "제품 태그 생성" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "제품 태그 삭제" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "편집할 수 없는 기존 제품 태그 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "편집할 수 없는 기존 제품 태그의 일부 필드를 다시 작성합니다." + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "검색어가 입력되지 않았습니다." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "검색" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "이름" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "카테고리" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "카테고리 슬러그" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "태그" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "최소 가격" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "최대 가격" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "활성 상태" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "브랜드" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "속성" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "수량" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "슬러그" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "디지털" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "하위 카테고리 포함" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "개인 주문 제품 포함" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "검색(ID, 제품명 또는 부품 번호)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "구매 후(포함)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "이전 구매(포함)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "사용자 이메일" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "사용자 UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "상태" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "사람이 읽을 수 있는 ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "부모" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "전체 카테고리(1개 이상의 제품 보유 여부)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "레벨" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "제품 UUID" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "캐시에서 찾거나 캐시에 설정할 키" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "캐시에 저장할 데이터" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "캐시에 저장할 데이터를 설정하는 데 걸리는 시간(초)" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "캐시된 데이터" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "http(s)://로 시작하는 URL만 허용됩니다." + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "주문에 제품 추가" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "주문에서 제품 제거" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "주문에서 모든 제품 제거" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "주문 구매" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "제품 목록에 대한 작업을 순서대로 수행합니다." + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "제거/추가" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "위시리스트의 제품 목록에서 작업 수행하기" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "위시리스트_유아이디` 값을 입력하세요." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "주문에 제품 추가" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "주문에서 제품 제거" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "주문에서 제품 제거" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "주문에서 제품 제거" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "주문 구매" + +#: 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와 같은 형식의 문자열로 보내주세요." + +#: engine/core/graphene/mutations.py:549 +msgid "add or delete a feedback for orderproduct" +msgstr "주문 제품에 대한 피드백 추가 또는 삭제" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "작업은 '추가' 또는 '제거' 중 하나여야 합니다!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "사용자가 제공한 원본 주소 문자열" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name}가 존재하지 않습니다: {uuid}!" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "한도는 1에서 10 사이여야 합니다." + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - 마법처럼 작동" + +#: 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:95 +msgid "grouped attributes" +msgstr "그룹화된 속성" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "속성 그룹" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "브랜드" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "카테고리" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "이 카테고리를 필터링하는 데 사용할 수 있는 속성 및 값입니다." + +#: 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:205 +msgid "tags for this category" +msgstr "이 카테고리의 태그" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "이 카테고리의 제품" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "공급업체" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "위도(Y 좌표)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "경도(X 좌표)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "방법" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "사용자의 피드백을 나타냅니다." + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "피드백" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "주문 제품 목록은 다음 순서로 표시됩니다." + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "청구서 수신 주소" + +#: 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:414 +msgid "total price of this order" +msgstr "이 주문의 총 가격" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "주문한 제품의 총 수량" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "이 주문에 대한 거래" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "주문" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "이미지 URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "제품 이미지" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "피드백" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "속성 그룹" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "가격" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "수량" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "피드백 수" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "개인 주문만 가능한 제품" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "할인 가격" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "제품" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "프로모션 코드" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "판매 중인 제품" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "프로모션" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "공급업체" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "제품" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "위시리스트 제품" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "위시리스트" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "태그가 지정된 제품" + +#: 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:665 +msgid "tagged categories" +msgstr "태그가 지정된 카테고리" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "카테고리 태그" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "프로젝트 이름" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "회사 이름" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "회사 주소" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "회사 전화번호" + +#: 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:681 +msgid "email host user" +msgstr "이메일 호스트 사용자" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "최대 결제 금액" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "최소 결제 금액" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "애널리틱스 데이터" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "광고 데이터" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "구성" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "언어 코드" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "언어 이름" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "언어 플래그가 있는 경우 :)" + +#: 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 +msgid "products search results" +msgstr "제품 검색 결과" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "제품 검색 결과" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 " +"있으며 계층 구조를 형성할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하는 데 유용할 수 있습니다." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "이 그룹의 부모" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "상위 속성 그룹" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "속성 그룹의 이름" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "속성 그룹" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"외부 공급업체 및 해당 공급업체의 상호 작용 요구 사항에 대한 정보를 저장할 수 있는 공급업체 엔티티를 나타냅니다. 공급업체 클래스는 " +"외부 공급업체와 관련된 정보를 정의하고 관리하는 데 사용됩니다. 공급업체의 이름, 통신에 필요한 인증 세부 정보, 공급업체에서 검색한 " +"제품에 적용된 마크업 비율을 저장합니다. 또한 이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용하는 " +"시스템에서 사용하기에 적합합니다." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "공급업체의 API 통신에 필요한 자격 증명과 엔드포인트를 저장합니다." + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "인증 정보" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "이 공급업체에서 검색된 제품에 대한 마크업을 정의합니다." + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "공급업체 마크업 비율" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "이 공급업체의 이름" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "공급업체 이름" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "응답 파일" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "공급업체의 마지막 처리 응답" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "공급업체의 통합 파일 경로" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "통합 경로" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"제품을 분류하거나 식별하는 데 사용되는 제품 태그를 나타냅니다. ProductTag 클래스는 내부 태그 식별자와 사용자 친화적인 표시 " +"이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 " +"사용자 지정을 제공합니다." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "제품 태그의 내부 태그 식별자" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "태그 이름" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "제품 태그의 사용자 친화적인 이름" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "태그 표시 이름" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "제품 태그" + +#: engine/core/models.py:229 +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 "" +"제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부" +" 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "카테고리 태그" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "카테고리 태그" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"관련 항목을 계층 구조로 정리하고 그룹화할 카테고리 엔티티를 나타냅니다. 카테고리는 다른 카테고리와 계층적 관계를 가질 수 있으며, " +"상위-하위 관계를 지원합니다. 이 클래스에는 카테고리 관련 기능의 기반이 되는 메타데이터 및 시각적 표현을 위한 필드가 포함되어 " +"있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 " +"관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "이 카테고리를 대표하는 이미지 업로드" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "카테고리 이미지" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "이 카테고리의 제품에 대한 마크업 비율을 정의합니다." + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "계층 구조를 형성하는 이 카테고리의 상위 카테고리" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "상위 카테고리" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "카테고리 이름" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "이 카테고리의 이름을 입력합니다." + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "이 카테고리에 대한 자세한 설명 추가" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "카테고리 설명" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "우선순위" + +#: engine/core/models.py:438 +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." +msgstr "" +"시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " +"및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "이 브랜드 이름" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "브랜드 이름" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "이 브랜드를 대표하는 로고 업로드" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "브랜드 작은 이미지" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "이 브랜드를 대표하는 큰 로고 업로드" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "브랜드 빅 이미지" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "브랜드에 대한 자세한 설명 추가" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "브랜드 설명" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "이 브랜드와 연관된 선택적 카테고리" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 및" +" 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" +" 재고 관리 시스템의 일부입니다." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "이 제품 재고를 공급하는 공급업체" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "관련 공급업체" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "마크업 후 고객에게 제공되는 최종 가격" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "판매 가격" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "이 주식 항목과 관련된 제품" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "관련 제품" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "이 제품에 대해 공급업체에 지불한 가격" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "공급업체 구매 가격" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "재고가 있는 제품의 사용 가능한 수량" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "재고 수량" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "공급업체의 SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "해당되는 경우 이 주식과 관련된 디지털 파일" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "디지털 파일" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "시스템 속성" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "재고 항목" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"카테고리, 브랜드, 태그, 디지털 상태, 이름, 설명, 부품 번호, 슬러그 등의 속성을 가진 제품을 나타냅니다. 평점, 피드백 수, " +"가격, 수량, 총 주문 수 등을 검색할 수 있는 관련 유틸리티 속성을 제공합니다. 이커머스 또는 재고 관리를 처리하는 시스템에서 " +"사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " +"캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "이 제품이 속한 카테고리" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "선택 사항으로 이 제품을 브랜드와 연결" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다." + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "제품 디지털화 여부" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "제품에 대한 명확한 식별 이름 제공" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "제품 이름" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "제품에 대한 자세한 설명 추가" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "제품 설명" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "이 제품의 부품 번호" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "부품 번호" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "이 제품의 재고 보관 단위" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"시스템의 속성을 나타냅니다. 이 클래스는 다른 엔티티와 연결할 수 있는 사용자 지정 가능한 데이터 조각인 속성을 정의하고 관리하는 데 " +"사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 " +"여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "이 속성의 그룹" + +#: engine/core/models.py:739 +msgid "string" +msgstr "문자열" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "정수" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Float" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "부울" + +#: engine/core/models.py:743 +msgid "array" +msgstr "배열" + +#: engine/core/models.py:744 +msgid "object" +msgstr "개체" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "속성 값의 유형" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "값 유형" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "이 속성의 이름" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "속성 이름" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "필터링 가능" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" +"상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제품 특성을 더 잘 구성하고 동적으로 표현할 수 " +"있습니다." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "이 값의 속성" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "이 속성 값과 연관된 특정 제품" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "접근성을 위해 이미지에 대체 텍스트 제공" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "이미지 대체 텍스트" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "이 제품의 이미지 파일 업로드" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "제품 이미지" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "이미지가 표시되는 순서를 결정합니다." + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "우선순위 표시" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "이 이미지가 나타내는 제품" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "제품 이미지" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"할인이 적용되는 제품에 대한 프로모션 캠페인을 나타냅니다. 이 클래스는 제품에 대해 백분율 기반 할인을 제공하는 프로모션 캠페인을 " +"정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " +"포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "선택한 제품에 대한 할인 비율" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "할인 비율" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "이 프로모션의 고유한 이름을 입력하세요." + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "프로모션 이름" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "프로모션 설명" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "이 프로모션에 포함되는 제품 선택" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "포함된 제품" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "프로모션" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" +" 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "사용자가 원하는 것으로 표시한 제품" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "이 위시리스트를 소유한 사용자" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "위시리스트의 소유자" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "위시리스트" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"상품에 연결된 다큐멘터리 레코드를 나타냅니다. 이 클래스는 파일 업로드 및 메타데이터를 포함하여 특정 제품과 관련된 다큐멘터리에 대한 " +"정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" +" 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "다큐멘터리" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "다큐멘터리" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"위치 세부 정보 및 사용자와의 연결을 포함하는 주소 엔티티를 나타냅니다. 지리적 및 주소 데이터 저장과 지오코딩 서비스와의 통합을 위한 " +"기능을 제공합니다. 이 클래스는 거리, 도시, 지역, 국가, 지리적 위치(경도 및 위도)와 같은 구성 요소를 포함한 상세한 주소 정보를 " +"저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" +" 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "고객 주소 라인" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "주소 라인" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "거리" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "지구" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "도시" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "지역" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "우편 번호" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "국가" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "지리적 위치 포인트(경도, 위도)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "이 주소에 대한 지오코더의 전체 JSON 응답" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "지오코딩 서비스의 저장된 JSON 응답" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "주소" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "주소" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"할인에 사용할 수 있는 프로모션 코드를 나타내며, 유효 기간, 할인 유형 및 적용을 관리합니다. 프로모션 코드 클래스는 고유 식별자, " +"할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " +"여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "프로모션 코드 식별자" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "고정 할인 금액" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "고정 금액 미사용 시 적용되는 할인 비율" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "백분율 할인" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "프로모션 코드 만료 시 타임스탬프" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "유효 기간 종료 시간" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "이 프로모코드의 타임스탬프가 유효한 시점" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "유효 기간 시작 시간" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다." + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "사용 타임스탬프" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "해당되는 경우 이 프로모코드에 할당된 사용자" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "할당된 사용자" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "프로모션 코드" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "프로모션 코드" + +#: engine/core/models.py:1150 +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" +msgstr "프로모코드가 이미 사용되었습니다." + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "이 주문에 사용된 청구 주소" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "이 주문에 적용된 프로모션 코드(선택 사항)" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "프로모션 코드 적용" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "이 주문에 사용된 배송지 주소" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "배송 주소" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "라이프사이클 내 주문의 현재 상태" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "주문 상태" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "이 주문에 대한 주문 속성의 JSON 표현" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "주문한 사용자" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "사용자" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "주문이 완료된 타임스탬프" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "시간 확보" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "사람이 읽을 수 있는 주문 식별자" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "사람이 읽을 수 있는 ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "주문" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "주문에 비활성 제품을 추가할 수 없습니다." + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "프로모코드가 존재하지 않습니다." + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "주소가 존재하지 않습니다." + +#: 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 "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "잘못된 힘 값" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "빈 주문은 구매할 수 없습니다!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "사용자 없이는 주문을 구매할 수 없습니다!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "주문을 완료하기에 자금이 부족합니다." + +#: engine/core/models.py:1575 +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}로!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "제품 사용 경험에 대한 사용자 제공 의견" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "피드백 댓글" + +#: engine/core/models.py:1719 +msgid "" +"references the specific product in an order that this feedback is about" +msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "관련 주문 제품" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "제품에 대한 사용자 지정 평점" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "제품 평가" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"주문과 관련된 제품 및 해당 속성을 나타냅니다. 주문 제품 모델은 구매 가격, 수량, 제품 속성 및 상태 등의 세부 정보를 포함하여 " +"주문의 일부인 제품에 대한 정보를 유지 관리합니다. 사용자 및 관리자에 대한 알림을 관리하고 제품 잔액 반환 또는 피드백 추가와 같은 " +"작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " +"제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다." + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "주문 시점의 구매 가격" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "주문한 제품에 대한 관리자용 내부 댓글" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "내부 의견" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "사용자 알림" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "이 항목의 속성에 대한 JSON 표현" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "주문한 제품 속성" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "이 제품이 포함된 상위 주문 참조" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "상위 주문" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "이 주문 라인과 연결된 특정 제품" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "이 특정 제품의 주문 수량" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "제품 수량" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "이 제품의 현재 상태 순서" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "제품 라인 상태" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "주문제품에는 연결된 주문이 있어야 합니다!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다." + +#: engine/core/models.py:1894 +msgid "name" +msgstr "이름" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "통합 URL" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "인증 자격 증명" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다." + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "주문의 CRM 링크" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "주문의 CRM 링크" + +#: engine/core/models.py:1947 +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." +msgstr "" +"주문과 관련된 디지털 자산의 다운로드 기능을 나타냅니다. 디지털 자산 다운로드 클래스는 주문 상품과 관련된 다운로드를 관리하고 액세스할 " +"수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " +"여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "다운로드" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "다운로드" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "피드백을 추가하려면 댓글, 평점, 주문 제품 고유번호를 제공해야 합니다." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "홈" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "문의하기" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "회사 소개" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "고객 믹스(30일)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "신규 고객" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "재방문 고객" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "지난 30일 동안 고객 활동이 없습니다." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "일일 판매량" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "주문 (완료됨)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "총 수익" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "주문" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "대시보드" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "수입 개요" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "순 수익" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "세금" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "반환" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "총 수익" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "날짜 없음" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "순 수익" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "환불 비율" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "반환됨" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "재고 부족" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "재고가 부족한 품목이 없습니다." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "대부분의 반품 제품(30일)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "지난 30일 동안 반품이 없습니다." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "가장 많이 원하는 제품" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "아직 데이터가 없습니다." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "가장 인기 있는 제품" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "빠른 링크" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "사용할 수 있는 링크가 없습니다." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "배송 대 디지털(30일)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "디지털" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "배송됨" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "수량별 상위 카테고리(30일)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "지난 30일 동안 카테고리 매출이 없습니다." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "주문 확인" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "로고" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "안녕하세요 %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"주문해 주셔서 감사합니다 #%(order.pk)s! 주문하신 상품이 입고되었음을 알려드립니다. 주문 세부 정보는 아래와 같습니다:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "합계" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "총 가격" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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로 지원팀에 문의하세요." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "감사합니다,
%(config.PROJECT_NAME)s 팀" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "모든 권리 보유" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "주문 배송" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "안녕하세요 %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "주문이 성공적으로 처리되었습니다 №%(order_uuid)s! 주문 세부 정보는 아래와 같습니다:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"추가\n" +" 정보" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "가치" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "궁금한 점이 있으면 언제든지 %(contact_email)s로 지원팀에 문의하세요." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "감사합니다,
%(project_name)s 팀" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "키" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "행 추가" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "프로모코드 부여" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"저희와 함께 해주셔서 감사합니다! 프로모션 코드가 부여되었습니다.\n" +" 에 대한" + +#: 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" +" the details of your order:" +msgstr "주문해 주셔서 감사합니다! 구매를 확인하게 되어 기쁩니다. 주문 세부 정보는 아래와 같습니다:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "배송 가격" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "주문하신 상품은 다음 주소로 배송됩니다:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "감사합니다,
%(config.PROJECT_NAME)s 팀" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"모든 권리\n" +" 예약됨" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "데이터와 시간 초과가 모두 필요합니다." + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | 문의 시작됨" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | 주문 확인" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | 주문 배송" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "이 작업을 수행할 수 있는 권한이 없습니다." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" + +#: engine/core/validators.py:19 +#, 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} 픽셀을 초과하지 않아야 합니다!" + +#: engine/core/views.py:91 +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:106 +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 "" +"사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 " +"Content-Type 헤더를 설정합니다." + +#: engine/core/views.py:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "지원되는 언어 목록과 해당 정보를 반환합니다." + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "'문의하기' 양식 제출을 처리합니다." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "들어오는 POST 요청의 URL 처리 및 유효성 검사 요청을 처리합니다." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "글로벌 검색 쿼리를 처리합니다." + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다." + +#: engine/core/views.py:332 +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." +msgstr "" +"주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" +"이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "주문_제품_UUID는 필수입니다." + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "주문 제품이 존재하지 않습니다." + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다." + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "주문 제품에 제품이 없습니다." + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "파비콘을 찾을 수 없습니다." + +#: engine/core/views.py:404 +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." +msgstr "" +"웹사이트의 파비콘 요청을 처리합니다.\n" +"이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." + +#: engine/core/views.py:416 +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 "" +"요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " +"리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "현재 버전의 eVibes를 반환합니다." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "수익 및 주문(마지막 %(days)d)" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "대시보드에 대한 사용자 지정 변수를 반환합니다." + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Evibes 관련 작업을 관리하기 위한 뷰셋을 정의합니다. EvibesViewSet 클래스는 ModelViewSet에서 상속되며 " +"Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용자" +" 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다." + +#: 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." +msgstr "" +"속성 그룹 객체를 관리하기 위한 뷰셋을 나타냅니다. 데이터의 필터링, 직렬화, 검색 등 AttributeGroup과 관련된 작업을 " +"처리합니다. 이 클래스는 애플리케이션의 API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준화된" +" 방법을 제공합니다." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"애플리케이션 내에서 속성 개체와 관련된 작업을 처리합니다. 속성 데이터와 상호 작용할 수 있는 API 엔드포인트 세트를 제공합니다. 이 " +"클래스는 속성 개체의 쿼리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화된 정보와 상세한 정보를 검색하는 " +"등 반환되는 데이터를 동적으로 제어할 수 있도록 합니다." + +#: 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." +msgstr "" +"속성값 객체를 관리하기 위한 뷰셋입니다. 이 뷰셋은 AttributeValue 객체를 나열, 검색, 생성, 업데이트 및 삭제하기 위한 " +"기능을 제공합니다. 이 뷰셋은 장고 REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사용합니다. 필터링 " +"기능은 DjangoFilterBackend를 통해 제공됩니다." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"카테고리 관련 작업에 대한 보기를 관리합니다. CategoryViewSet 클래스는 시스템에서 카테고리 모델과 관련된 작업을 처리하는 " +"역할을 담당합니다. 카테고리 데이터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용자만 특정 데이터에 " +"액세스할 수 있도록 권한을 적용합니다." + +#: 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 엔드포인트의 구현을 간소화합니다." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"시스템에서 `Product` 모델과 관련된 작업을 관리합니다. 이 클래스는 필터링, 직렬화 및 특정 인스턴스에 대한 작업을 포함하여 " +"제품을 관리하기 위한 뷰셋을 제공합니다. 이 클래스는 공통 기능을 사용하기 위해 `EvibesViewSet`에서 확장되며 RESTful " +"API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 검색, 권한 적용, 제품의 관련 피드백에 액세스하는 " +"메서드가 포함되어 있습니다." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"벤더 객체를 관리하기 위한 뷰셋을 나타냅니다. 이 뷰셋을 통해 벤더 데이터를 가져오고, 필터링하고, 직렬화할 수 있습니다. 다양한 작업을" +" 처리하는 데 사용되는 쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 Django REST 프레임워크를 " +"통해 공급업체 관련 리소스에 대한 간소화된 액세스를 제공하는 것입니다." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"피드백 개체를 처리하는 뷰 집합의 표현입니다. 이 클래스는 세부 정보 나열, 필터링 및 검색을 포함하여 피드백 개체에 관련된 작업을 " +"관리합니다. 이 뷰 세트의 목적은 다양한 작업에 대해 서로 다른 직렬화기를 제공하고 접근 가능한 피드백 객체에 대한 권한 기반 처리를 " +"구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 " +"사용합니다." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"주문 및 관련 작업을 관리하기 위한 뷰셋입니다. 이 클래스는 주문 객체를 검색, 수정, 관리하는 기능을 제공합니다. 여기에는 제품 추가 " +"또는 제거, 등록 및 미등록 사용자에 대한 구매 수행, 현재 인증된 사용자의 보류 중인 주문 검색 등 주문 작업을 처리하기 위한 다양한 " +"엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " +"권한을 적용합니다." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"주문 제품 엔티티를 관리하기 위한 뷰셋을 제공합니다. 이 뷰셋을 사용하면 주문 제품 모델에 특정한 CRUD 작업 및 사용자 지정 작업을 " +"수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" +" 피드백 처리를 위한 세부 작업도 제공합니다." + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." + +#: engine/core/viewsets.py:914 +msgid "Represents a view set for managing promotions. " +msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." + +#: 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 " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"이 클래스는 `주소` 객체를 관리하기 위한 뷰셋 기능을 제공합니다. 주소 뷰셋 클래스는 주소 엔티티와 관련된 CRUD 작업, 필터링 및 " +"사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " +"동작이 포함되어 있습니다." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "지오코딩 오류입니다: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"애플리케이션 내에서 제품 태그와 관련된 작업을 처리합니다. 이 클래스는 제품 태그 객체를 검색, 필터링 및 직렬화하기 위한 기능을 " +"제공합니다. 지정된 필터 백엔드를 사용하여 특정 속성에 대한 유연한 필터링을 지원하며 수행 중인 작업에 따라 다양한 직렬화기를 동적으로 " +"사용합니다." diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.mo b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo new file mode 100644 index 00000000..f28a25f3 Binary files /dev/null and b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.po b/engine/core/locale/nl_NL/LC_MESSAGES/django.po new file mode 100644 index 00000000..6b0e3167 --- /dev/null +++ b/engine/core/locale/nl_NL/LC_MESSAGES/django.po @@ -0,0 +1,3549 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: nl-nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Uniek ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "Unieke ID wordt gebruikt om elk databaseobject te identificeren" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Is actief" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Gemaakt" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Wanneer het object voor het eerst in de database verscheen" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Gewijzigd" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Wanneer het object voor het laatst bewerkt is" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Vertalingen" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Algemeen" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relaties" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "extra informatie" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metagegevens" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Tijdstempels" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Geselecteerde items zijn geactiveerd!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Geselecteerde items zijn gedeactiveerd!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Attribuutwaarden" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Afbeelding" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Afbeeldingen" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Voorraad" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Aandelen" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Product bestellen" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Kinderen" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Config" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Kern" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Afgewerkt" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "leveren" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Geleverd" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Geannuleerd" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Mislukt" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "In afwachting van" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Geaccepteerd" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Geld terug" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Betaling" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Succesvol" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "OpenAPI schema in geselecteerd formaat met geselecteerde taal" + +#: engine/core/docs/drf/views.py:33 +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 "" +"OpenApi3 schema voor deze API. Formaat kan worden geselecteerd via " +"inhoudsonderhandeling. Taal kan worden geselecteerd met zowel Accept-" +"Language als query parameter." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Een lijst met ondersteunde talen opvragen" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Verkrijg de blootstelbare parameters van de applicatie" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Vraag een CORSed URL op. Alleen https toegestaan." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Zoeken tussen producten, categorieën en merken" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Eindpunt voor globaal zoeken om in alle tabellen van het project te zoeken" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Een bestelling kopen als bedrijf" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Koop een bestelling in als een bedrijf, met behulp van de meegeleverde " +"`producten` met `product_uuid` en `attributen`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "een digitaal goed downloaden van een gekochte digitale bestelling" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Alle attribuutgroepen weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Een enkele groep kenmerken ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Een attribuutgroep maken" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Een attribuutgroep verwijderen" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Een bestaande attribuutgroep herschrijven en niet-wijzigbare attributen " +"opslaan" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Alle attributen weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Een attribuut maken" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Een attribuut verwijderen" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Alle attribuutwaarden weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Een waarde voor een enkel kenmerk ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Een attribuutwaarde maken" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Een attribuutwaarde verwijderen" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Een bestaande attribuutwaarde herschrijven waarbij niet-wijzigbare " +"attributen worden opgeslagen" + +#: engine/core/docs/drf/viewsets.py:186 +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" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Alle categorieën weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Een enkele categorie ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Categorie UUID of slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Een categorie maken" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Een categorie verwijderen" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan" + +#: 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 "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: 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: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" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +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." + +#: 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" +msgstr "" +"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" +msgstr "Filter orders met buy_time >= deze ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filter orders met buy_time <= deze ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filter op exacte volgorde UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filter op exacte, door mensen leesbare bestel-ID" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filter op e-mail van gebruiker (hoofdlettergevoelige exacte overeenkomst)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filter op UUID van gebruiker" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +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')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Een enkele categorie ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Order UUID of menselijk leesbare id" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Een attribuut maken" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Werkt niet voor gebruikers die geen personeel zijn." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Een attribuut verwijderen" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Aankoopprijs bij bestelling" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Rondt de aankoop van de bestelling af. Als `force_balance` wordt gebruikt, " +"wordt de aankoop afgerond met het saldo van de gebruiker; als " +"`force_payment` wordt gebruikt, wordt een transactie gestart." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "huidige lopende order van een gebruiker ophalen" + +#: engine/core/docs/drf/viewsets.py:398 +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: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." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Een product aan de bestelling toevoegen" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Voegt een product toe aan een bestelling met de opgegeven `product_uuid` en " +"`attributen`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" +"Voeg een lijst met producten toe om te bestellen, hoeveelheden tellen niet " +"mee" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Voegt een lijst met producten toe aan een bestelling met behulp van de " +"opgegeven `product_uuid` en `attributen`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Een product uit de bestelling verwijderen" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Verwijdert een product uit een bestelling met behulp van de opgegeven " +"`product_uuid` en `attributen`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Verwijder een product uit de bestelling, hoeveelheden tellen niet mee" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Verwijdert een lijst met producten uit een bestelling met behulp van de " +"opgegeven `product_uuid` en `attributen`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Alle attributen weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Voor niet-personeelsleden worden alleen hun eigen verlanglijstjes " +"geretourneerd." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Een attribuut maken" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Werkt niet voor gebruikers die geen personeel zijn." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Een attribuut verwijderen" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "huidige wachtlijst van een gebruiker ophalen" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"haalt een huidig afwachtend verlanglijstje op van een geauthenticeerde " +"gebruiker" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Een product aan de bestelling toevoegen" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Voegt een product toe aan een verlanglijstje met behulp van de opgegeven " +"`product_uuid`." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Een product uit het verlanglijstje verwijderen" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Verwijdert een product van een verlanglijstje met behulp van de opgegeven " +"`product_uuid`." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Veel producten toevoegen aan het verlanglijstje" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Voegt veel producten toe aan een verlanglijstje met behulp van de opgegeven " +"`product_uuids`." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Een product uit de bestelling verwijderen" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Verwijdert een groot aantal producten uit een verlanglijstje met behulp van " +"de opgegeven `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" +"• **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" +"`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" +"Voorbeelden: \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 +msgid "list all products (simple view)" +msgstr "Alle producten weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Een enkel product ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "" +"Een bestaand product herschrijven met behoud van niet-wijzigbare velden" + +#: 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 "" +"Enkele velden van een bestaand product bijwerken, met behoud van niet-" +"wijzigbare velden" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Een product verwijderen" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "somt alle toegestane feedbacks voor een product op" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "" +"Geeft als resultaat een momentopname van de SEO-metagegevens van het product" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Vermeld alle adressen" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Een enkel adres ophalen" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Een nieuw adres maken" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Een adres verwijderen" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Een heel adres bijwerken" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Een adres gedeeltelijk bijwerken" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Automatische adresinvoer" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Ruwe gegevensquerystring, gelieve aan te vullen met gegevens van geo-IP " +"eindpunt" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "beperkt de hoeveelheid resultaten, 1 < limiet < 10, standaard: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "alle feedbacks weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "een enkele feedback ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "een feedback creëren" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "een feedback verwijderen" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" +"een bestaande feedback herschrijven waarbij niet-wijzigbare gegevens worden " +"opgeslagen" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +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)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "een nieuwe bestelling-product relatie maken" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "een bestaande order-productrelatie vervangen" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "een bestaande order-productrelatie gedeeltelijk bijwerken" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "een order-productrelatie verwijderen" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "feedback toevoegen of verwijderen op een order-productrelatie" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Alle merken weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Een enkel merk ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Merk UUID of slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Een merk creëren" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Een merk verwijderen" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Een bestaand merk herschrijven door niet-editables op te slaan" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Alle leveranciers weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Een enkele leverancier ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Een leverancier maken" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Een verkoper verwijderen" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" +"Een bestaande verkoper herschrijven en niet-wijzigbare gegevens opslaan" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Alle productafbeeldingen weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Een enkele productafbeelding ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Een productafbeelding maken" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Een productafbeelding verwijderen" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Een bestaande productafbeelding herschrijven waarbij niet-wijzigbare " +"gegevens worden opgeslagen" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Alle promotiecodes weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Een enkele promotiecode ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Een promotiecode maken" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Een promotiecode verwijderen" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Een bestaande promocode herschrijven die niet-wijzigbaar is" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Alle promoties weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Een enkele promotie ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Maak een promotie" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Een promotie verwijderen" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" +"Een bestaande promotie herschrijven waarbij niet-wijzigbare gegevens worden " +"opgeslagen" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Alle aandelen weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Een enkele voorraad ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Een voorraadrecord maken" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Een voorraadrecord verwijderen" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Een bestaand voorraadrecord herschrijven waarbij niet-wijzigbare gegevens " +"worden opgeslagen" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Alle producttags weergeven (eenvoudige weergave)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Een enkele producttag ophalen (gedetailleerde weergave)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Een producttag maken" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Een producttag verwijderen" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Een bestaande producttag herschrijven en niet-wijzigbare tags opslaan" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " +"velden op te slaan" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Geen zoekterm opgegeven." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Zoek op" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Naam" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Categorieën" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Categorieën Naaktslakken" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tags" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Min Prijs" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Maximale prijs" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Is actief" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Merk" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Attributen" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Hoeveelheid" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Slak" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Is digitaal" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Subcategorieën opnemen" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Inclusief persoonlijk bestelde producten" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Er moet een categorie_uuid zijn om include_subcategories vlag te gebruiken" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Zoeken (ID, productnaam of onderdeelnummer)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Gekocht na (inclusief)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Eerder gekocht (inclusief)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "E-mail gebruiker" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "Gebruiker UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Menselijk leesbare ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Ouder" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Hele categorie (heeft minstens 1 product of niet)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Niveau" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Product UUID" + +#: 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:41 +msgid "data to store in cache" +msgstr "Gegevens om op te slaan in de cache" + +#: 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:47 +msgid "cached data" +msgstr "Gecachte gegevens" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Een product aan de bestelling toevoegen" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Alle producten uit de bestelling verwijderen" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Een bestelling kopen" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Verwijderen/toevoegen" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Geef de waarde `wishlist_uuid` op." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Een product aan de bestelling toevoegen" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Een product uit de bestelling verwijderen" + +#: 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:510 +msgid "buy a product" +msgstr "Een bestelling kopen" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "Feedback toevoegen of verwijderen voor het orderproduct" + +#: 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:576 +#, python-brace-format +msgid "order product {order_product_uuid} not found" +msgstr "Orderproduct {order_product_uuid} niet gevonden!" + +#: 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: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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} bestaat niet: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - werkt als een charme" + +#: 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:95 +msgid "grouped attributes" +msgstr "Gegroepeerde kenmerken" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Groepen van kenmerken" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Merken" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Categorieën" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Tags voor deze categorie" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Producten in deze categorie" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Verkopers" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Breedtegraad (Y-coördinaat)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Lengtegraad (X-coördinaat)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Hoe" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Vertegenwoordigt feedback van een gebruiker." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Feedback" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Factuuradres" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Totale prijs van deze bestelling" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Zijn alle producten in de bestelling digitaal" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Transacties voor deze bestelling" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Bestellingen" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Afbeelding URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Afbeeldingen van het product" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Reacties" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Attribuutgroepen" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Prijs" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Hoeveelheid" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Aantal terugkoppelingen" + +#: 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:484 +msgid "discount price" +msgstr "Korting" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Producten" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promocodes" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Producten te koop" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promoties" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Verkoper" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Product" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Gewenste producten" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Verlanglijst" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Getagde producten" + +#: 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:665 +msgid "tagged categories" +msgstr "Getagde categorieën" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Categorieën' tags" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Naam project" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Bedrijfsnaam" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Adres" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Telefoonnummer bedrijf" + +#: 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:681 +msgid "email host user" +msgstr "Gebruiker e-mail hosten" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Maximumbedrag voor betaling" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Minimumbedrag voor betaling" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analytics-gegevens" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Advertentiegegevens" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configuratie" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Taalcode" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Naam van de taal" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Taalvlag, indien aanwezig :)" + +#: 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 +msgid "products search results" +msgstr "Producten zoekresultaten" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Zoekresultaten" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Ouder van deze groep" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Ouderattribuutgroep" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Naam attribuutgroep" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Attribuutgroep" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"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 " +"van de verkoper worden opgehaald. Dit model onderhoudt ook aanvullende " +"metadata en beperkingen, waardoor het geschikt is voor gebruik in systemen " +"die communiceren met externe verkopers." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Slaat referenties en eindpunten op die vereist zijn voor API-communicatie " +"van de verkoper" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Authenticatie-info" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" +"Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Verkoper winstpercentage" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Naam van deze verkoper" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Naam verkoper" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "responsbestand" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "laatste verwerkingsreactie van verkoper" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Pad integratiebestand verkoper" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Integratie pad" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +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 " +"ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt " +"aanpassing van metadata voor administratieve doeleinden." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Interne tagidentifier voor de producttag" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tag naam" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Gebruiksvriendelijke naam voor de producttag" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Tag weergavenaam" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Productlabel" + +#: engine/core/models.py:229 +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 "" +"Representeert een categorietag die gebruikt wordt voor producten. Deze " +"klasse modelleert een categorietag die kan worden gebruikt om producten te " +"associëren en te classificeren. Ze bevat attributen voor een interne " +"tagidentifier en een gebruiksvriendelijke weergavenaam." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "categorie tag" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "categorie tags" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +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 " +"kunnen toekennen." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Upload een afbeelding die deze categorie vertegenwoordigt" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Categorie afbeelding" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Definieer een toeslagpercentage voor producten in deze categorie" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Ouder van deze categorie om een hiërarchische structuur te vormen" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Oudercategorie" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Naam categorie" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Geef deze categorie een naam" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Categorie beschrijving" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tags die deze categorie helpen beschrijven of groeperen" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Prioriteit" + +#: engine/core/models.py:438 +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." +msgstr "" +"Vertegenwoordigt een merkobject in het systeem. Deze klasse behandelt " +"informatie en attributen met betrekking tot een merk, inclusief de naam, " +"logo's, beschrijving, geassocieerde categorieën, een unieke slug en " +"prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden " +"georganiseerd en weergegeven in de applicatie." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Naam van dit merk" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Merknaam" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Upload een logo dat dit merk vertegenwoordigt" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Klein merkimago" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Upload een groot logo dat dit merk vertegenwoordigt" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Groot merkimago" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Een gedetailleerde beschrijving van het merk toevoegen" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Merknaam" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Vertegenwoordigt de voorraad van een product dat in het systeem wordt " +"beheerd. Deze klasse geeft details over de relatie tussen leveranciers, " +"producten en hun voorraadinformatie, evenals voorraadgerelateerde " +"eigenschappen zoals prijs, aankoopprijs, hoeveelheid, SKU en digitale " +"activa. Het maakt deel uit van het voorraadbeheersysteem om het volgen en " +"evalueren van beschikbare producten van verschillende leveranciers mogelijk " +"te maken." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "De verkoper die dit product levert" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Geassocieerde verkoper" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Eindprijs voor de klant na winstmarges" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Verkoopprijs" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Het product dat bij deze voorraadvermelding hoort" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Bijbehorend product" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "De prijs die voor dit product aan de verkoper is betaald" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Aankoopprijs verkoper" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Beschikbare hoeveelheid van het product in voorraad" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Hoeveelheid op voorraad" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Door de verkoper toegewezen SKU om het product te identificeren" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Verkoper SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digitaal bestand" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Systeemeigenschappen" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Voorraadboekingen" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Representeert een product met attributen zoals categorie, merk, tags, " +"digitale status, naam, beschrijving, onderdeelnummer en slug. Biedt " +"gerelateerde hulpeigenschappen om beoordelingen, feedbacktellingen, prijs, " +"hoeveelheid en totaal aantal orders op te halen. Ontworpen voor gebruik in " +"een systeem dat e-commerce of voorraadbeheer afhandelt. Deze klasse " +"interageert met gerelateerde modellen (zoals Categorie, Merk en ProductTag) " +"en beheert caching voor veelgebruikte eigenschappen om de prestaties te " +"verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende " +"informatie te definiëren en te manipuleren binnen een applicatie." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Categorie waartoe dit product behoort" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Dit product optioneel koppelen aan een merk" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tags die dit product helpen beschrijven of groeperen" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Geeft aan of dit product digitaal wordt geleverd" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Is product digitaal" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Zorg voor een duidelijke identificerende naam voor het product" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Naam product" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Voeg een gedetailleerde beschrijving van het product toe" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Productbeschrijving" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Onderdeelnummer voor dit product" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Onderdeelnummer" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Voorraadhoudende eenheid voor dit product" + +#: engine/core/models.py:720 +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 " +"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 " +"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 " +"gegevensstructurering mogelijk." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Groep van dit kenmerk" + +#: engine/core/models.py:739 +msgid "string" +msgstr "String" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Integer" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Vlotter" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Booleaans" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Object" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Type waarde van het kenmerk" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Waardetype" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Naam van dit kenmerk" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Naam attribuut" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "kan worden gefilterd" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Welke attributen en waarden kunnen worden gebruikt om deze categorie te " +"filteren." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +msgstr "" +"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." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attribuut van deze waarde" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Vertegenwoordigt een productafbeelding die gekoppeld is aan een product in " +"het systeem. Deze klasse is ontworpen om afbeeldingen voor producten te " +"beheren, inclusief functionaliteit voor het uploaden van " +"afbeeldingsbestanden, ze te associëren met specifieke producten en hun " +"weergavevolgorde te bepalen. Het bevat ook een toegankelijkheidsfunctie met " +"alternatieve tekst voor de afbeeldingen." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Alt-tekst afbeelding" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Upload het afbeeldingsbestand voor dit product" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Product afbeelding" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Prioriteit weergeven" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Het product dat deze afbeelding vertegenwoordigt" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Product afbeeldingen" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"Vertegenwoordigt een promotiecampagne voor producten met een korting. Deze " +"klasse wordt gebruikt om promotiecampagnes te definiëren en beheren die een " +"procentuele korting bieden voor producten. De klasse bevat attributen voor " +"het instellen van het kortingspercentage, het verstrekken van details over " +"de promotie en het koppelen aan de van toepassing zijnde producten. Het " +"integreert met de productcatalogus om de betreffende artikelen in de " +"campagne te bepalen." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Kortingspercentage voor de geselecteerde producten" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Kortingspercentage" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Geef deze promotie een unieke naam" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Naam promotie" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Promotie beschrijving" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Selecteer welke producten onder deze promotie vallen" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Meegeleverde producten" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promotie" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Vertegenwoordigt het verlanglijstje van een gebruiker voor het opslaan en " +"beheren van gewenste producten. De klasse biedt functionaliteit voor het " +"beheren van een verzameling producten en ondersteunt bewerkingen zoals het " +"toevoegen en verwijderen van producten, maar ook bewerkingen voor het " +"toevoegen en verwijderen van meerdere producten tegelijk." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Gebruiker die eigenaar is van deze verlanglijst" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Eigenaar verlanglijstje" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Verlanglijst" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"Vertegenwoordigt een documentair record gekoppeld aan een product. Deze " +"klasse wordt gebruikt om informatie op te slaan over documentaires met " +"betrekking tot specifieke producten, met inbegrip van het uploaden van " +"bestanden en hun metadata. Het bevat methoden en eigenschappen om het " +"bestandstype en het opslagpad voor de documentaire bestanden te behandelen. " +"Het breidt functionaliteit uit van specifieke mixins en biedt extra " +"aangepaste functies." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documentaire" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentaires" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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). " +"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, " +"wat het verwerken van gepersonaliseerde gegevens vergemakkelijkt." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Adresregel voor de klant" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Adresregel" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Straat" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "District" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Stad" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Regio" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Postcode" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Land" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Volledig JSON-antwoord van geocoder voor dit adres" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adres" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adressen" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Vertegenwoordigt een promotiecode die kan worden gebruikt voor kortingen en " +"beheert de geldigheid, het type korting en de toepassing ervan. De klasse " +"PromoCode slaat details op over een promotiecode, inclusief de unieke " +"identificatiecode, kortingseigenschappen (bedrag of percentage), " +"geldigheidsperiode, geassocieerde gebruiker (indien van toepassing) en " +"status van het gebruik. De klasse bevat functionaliteit om de promotiecode " +"te valideren en toe te passen op een bestelling, waarbij ervoor wordt " +"gezorgd dat aan de beperkingen wordt voldaan." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Unieke code die een gebruiker gebruikt om een korting te verzilveren" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Promo code identificatie" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "" +"Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Vast kortingsbedrag" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "" +"Kortingspercentage dat wordt toegepast als het vaste bedrag niet wordt " +"gebruikt" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Kortingspercentage" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Tijdstempel wanneer de promocode verloopt" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Geldigheidsduur einde" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" + +#: engine/core/models.py:1115 +msgid "start validity time" +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" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Gebruik tijdstempel" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Toegewezen gebruiker" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Kortingscode" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Actiecodes" + +#: engine/core/models.py:1150 +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." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promocode is al gebruikt" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Representeert een door een gebruiker geplaatste bestelling. Deze klasse " +"modelleert een bestelling binnen de applicatie, inclusief de verschillende " +"attributen zoals factuur- en verzendinformatie, status, gekoppelde " +"gebruiker, meldingen en gerelateerde bewerkingen. Bestellingen kunnen " +"gekoppelde producten hebben, promoties kunnen worden toegepast, adressen " +"kunnen worden ingesteld en verzend- of factureringsgegevens kunnen worden " +"bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten " +"in de levenscyclus van de bestelling." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Het factuuradres dat voor deze bestelling is gebruikt" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Optionele promotiecode toegepast op deze bestelling" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Kortingscode toegepast" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Het verzendadres dat voor deze bestelling is gebruikt" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Verzendadres" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Huidige status van de order in zijn levenscyclus" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Bestelstatus" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON-structuur van meldingen om weer te geven aan gebruikers, in admin UI " +"wordt de tabelweergave gebruikt" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON-weergave van bestelattributen voor deze bestelling" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "De gebruiker die de bestelling heeft geplaatst" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Gebruiker" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "De tijdstempel waarop de bestelling is afgerond" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Tijd kopen" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Een menselijk leesbare identificatiecode voor de bestelling" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "menselijk leesbare ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Bestel" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Een gebruiker mag maar één lopende order tegelijk hebben!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"U kunt geen producten toevoegen aan een bestelling die niet in behandeling " +"is." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn" + +#: 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 "" +"U kunt geen producten verwijderen uit een bestelling die niet in behandeling" +" is." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} bestaat niet met query <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promocode bestaat niet" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adres bestaat niet" + +#: 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 kunt op dit moment niet kopen. Probeer het over een paar minuten nog eens." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Ongeldige krachtwaarde" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +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." + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Onvoldoende fondsen om de bestelling te voltooien" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"u niet kunt kopen zonder registratie, geef dan de volgende informatie: " +"klantnaam, e-mail klant, telefoonnummer klant" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Ongeldige betalingsmethode: {payment_method} van " +"{available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"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 " +"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 " +"beheren." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Opmerkingen van gebruikers over hun ervaring met het product" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "Reacties" + +#: engine/core/models.py:1719 +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" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Gerelateerd product bestellen" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Door de gebruiker toegekende waardering voor het product" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Productbeoordeling" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Vertegenwoordigt producten die zijn gekoppeld aan orders en hun attributen. " +"Het OrderProduct-model onderhoudt informatie over een product dat deel " +"uitmaakt van een bestelling, met inbegrip van details zoals aankoopprijs, " +"hoeveelheid, productkenmerken en status. Het beheert meldingen voor de " +"gebruiker en beheerders en handelt handelingen af zoals het retourneren van " +"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." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "De prijs die de klant bij aankoop voor dit product heeft betaald" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Aankoopprijs bij bestelling" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Interne opmerkingen voor beheerders over dit bestelde product" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Interne opmerkingen" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Meldingen van gebruikers" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON weergave van de attributen van dit item" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Geordende producteigenschappen" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Ouderlijk bevel" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Het specifieke product dat bij deze bestelregel hoort" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Hoeveelheid van dit specifieke product in de bestelling" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Hoeveelheid product" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Huidige status van dit product in de bestelling" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status productlijn" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct moet een bijbehorende order hebben!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +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." + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Naam" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL van de integratie" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Authenticatiegegevens" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Je kunt maar één standaard CRM-provider hebben" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM's" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "CRM link van bestelling" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "CRM-koppelingen voor bestellingen" + +#: engine/core/models.py:1947 +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." +msgstr "" +"Vertegenwoordigt de downloadfunctionaliteit voor digitale activa gekoppeld " +"aan bestellingen. De DigitalAssetDownload klasse biedt de mogelijkheid om " +"downloads gerelateerd aan orderproducten te beheren en te openen. Het " +"onderhoudt informatie over het geassocieerde orderproduct, het aantal " +"downloads en of het object publiekelijk zichtbaar is. Het bevat een methode " +"om een URL te genereren voor het downloaden van de activa wanneer de " +"bijbehorende order een voltooide status heeft." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Downloaden" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Downloads" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"Om feedback toe te voegen, moet je een opmerking, beoordeling en " +"productidentificatie opgeven." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Home" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Neem contact met ons op" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Over ons" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Klantenmix (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nieuwe klanten" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Terugkerende klanten" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Geen klantenactiviteit in de afgelopen 30 dagen." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Dagelijkse verkoop" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Bestellingen (AFGESLOTEN)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Bruto-omzet" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Bestellingen" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Dashboard" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Overzicht inkomsten" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Netto-inkomsten" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Belastingen" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Geeft" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Bruto-omzet" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Geen datum" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Netto-inkomsten" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Restitutie" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Geretourneerd" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Lage voorraad" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Geen artikelen met weinig voorraad." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Meest geretourneerde producten (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Geen retourzendingen in de afgelopen 30 dagen." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Meest gewenste product" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Nog geen gegevens." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Populairste product" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Snelle links" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Geen links beschikbaar." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Verzonden vs digitaal (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digitaal" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Verzonden" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Topcategorieën naar hoeveelheid (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Geen categorieverkopen in de afgelopen 30 dagen." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django website beheerder" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Orderbevestiging" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hallo %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Hartelijk dank voor uw bestelling #%(order.pk)s! We zijn blij om u te " +"informeren dat we uw bestelling in behandeling hebben genomen. Hieronder " +"vindt u de gegevens van uw bestelling:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Totaal" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Totale prijs" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Als je vragen hebt, neem dan gerust contact op met onze ondersteuning op " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Vriendelijke groeten,
het %(config.PROJECT_NAME)s team" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Alle rechten voorbehouden" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Bestelling geleverd" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hallo %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"We hebben uw bestelling succesvol verwerkt №%(order_uuid)s! Hieronder vindt " +"u de details van uw bestelling:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"aanvullende\n" +" informatie" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Waarde" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Als je vragen hebt, kun je contact opnemen met onze klantenservice op " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Vriendelijke groeten,
het %(project_name)s team" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Sleutel" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Rij toevoegen" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promocode toegekend" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Bedankt dat je bij ons bent gebleven! We hebben u een promocode\n" +" voor" + +#: 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" +" the details of your order:" +msgstr "" +"Bedankt voor uw bestelling! We zijn blij om uw aankoop te bevestigen. " +"Hieronder vindt u de gegevens van uw bestelling:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Verzendprijs" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Je bestelling wordt afgeleverd op het volgende adres:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Vriendelijke groeten,
Het %(config.PROJECT_NAME)s team" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"alle rechten\n" +" voorbehouden" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +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" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +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 "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | orderbevestiging" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | bestelling geleverd" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "U hebt geen toestemming om deze actie uit te voeren." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "De parameter NOMINATIM_URL moet worden geconfigureerd!" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" +"Afbeeldingsafmetingen mogen niet groter zijn dan w{max_width} x " +"h{max_height} pixels" + +#: engine/core/views.py:91 +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 "" +"Behandelt het verzoek voor de sitemap-index en stuurt een XML-antwoord " +"terug. Het zorgt ervoor dat het antwoord de juiste inhoudstype header voor " +"XML bevat." + +#: engine/core/views.py:106 +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 "" +"Behandelt de gedetailleerde weergave respons voor een sitemap. Deze functie " +"verwerkt het verzoek, haalt het juiste sitemap detail antwoord op en stelt " +"de Content-Type header in voor XML." + +#: engine/core/views.py:141 +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:173 +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:192 +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." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Handelt `contact met ons` formulier inzendingen af." + +#: engine/core/views.py:240 +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." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Handelt globale zoekopdrachten af." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid is vereist" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "bestelproduct bestaat niet" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "U kunt het digitale goed maar één keer downloaden" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Het bestelde product heeft geen product" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon niet gevonden" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Stuurt het verzoek door naar de admin-indexpagina. De functie handelt " +"inkomende HTTP-verzoeken af en leidt ze door naar de indexpagina van de " +"Django admin-interface. Het gebruikt Django's `redirect` functie voor het " +"afhandelen van de HTTP-omleiding." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Geeft als resultaat de huidige versie van eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Inkomsten en orders (laatste %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +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 " +"ondersteuning voor dynamische serializer klassen op basis van de huidige " +"actie, aanpasbare machtigingen, en rendering formaten." + +#: 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." +msgstr "" +"Vertegenwoordigt een viewset voor het beheren van AttributeGroup objecten. " +"Verwerkt bewerkingen met betrekking tot AttributeGroup, inclusief filteren, " +"serialisatie en ophalen van gegevens. Deze klasse maakt deel uit van de API-" +"laag van de applicatie en biedt een gestandaardiseerde manier om verzoeken " +"en reacties voor AttributeGroup-gegevens te verwerken." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Handelt bewerkingen af met betrekking tot Attribuutobjecten binnen de " +"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." + +#: 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." +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 " +"viewset mechanismen en gebruikt passende serializers voor verschillende " +"acties. Filtermogelijkheden worden geleverd door de DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Beheert weergaven voor Categorie-gerelateerde bewerkingen. De klasse " +"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." + +#: 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 "" +"Vertegenwoordigt een viewset voor het beheren van Merk instanties. Deze " +"klasse biedt functionaliteit voor het bevragen, filteren en seriëren van " +"Merk objecten. Het gebruikt Django's ViewSet framework om de implementatie " +"van API endpoints voor Merk objecten te vereenvoudigen." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Beheert bewerkingen met betrekking tot het `Product` model in het systeem. " +"Deze klasse biedt een viewset voor het beheren van producten, inclusief hun " +"filtering, serialisatie en bewerkingen op specifieke instanties. Het breidt " +"uit van `EvibesViewSet` om gemeenschappelijke functionaliteit te gebruiken " +"en integreert met het Django REST framework voor RESTful API operaties. " +"Bevat methoden voor het ophalen van productdetails, het toepassen van " +"machtigingen en het verkrijgen van toegang tot gerelateerde feedback over " +"een product." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +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-" +"gerelateerde bronnen via het Django REST framework." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"Weergave van een weergaveset die Feedback-objecten afhandelt. Deze klasse " +"beheert handelingen met betrekking tot Feedback-objecten, zoals het " +"weergeven, filteren en ophalen van details. Het doel van deze viewset is om " +"verschillende serializers voor verschillende acties te bieden en op " +"toestemming gebaseerde afhandeling van toegankelijke Feedback-objecten te " +"implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van " +"Django's filtersysteem voor het opvragen van gegevens." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet voor het beheren van orders en gerelateerde operaties. Deze klasse " +"biedt functionaliteit voor het ophalen, wijzigen en beheren van " +"bestelobjecten. Het bevat verschillende eindpunten voor het afhandelen van " +"bestelbewerkingen zoals het toevoegen of verwijderen van producten, het " +"uitvoeren van aankopen voor zowel geregistreerde als niet-geregistreerde " +"gebruikers en het ophalen van de lopende bestellingen van de huidige " +"geauthenticeerde gebruiker. De ViewSet gebruikt meerdere serializers " +"gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " +"dienovereenkomstig permissies af tijdens de interactie met ordergegevens." + +#: 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 " +"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 " +"instanties" + +#: 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: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." + +#: 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: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: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 " +"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 voor het beheren van verlanglijstbewerkingen. De WishlistViewSet " +"biedt eindpunten voor interactie met de verlanglijst van een gebruiker, " +"zodat producten in de verlanglijst kunnen worden opgehaald, gewijzigd en " +"aangepast. Deze ViewSet faciliteert functionaliteit zoals toevoegen, " +"verwijderen en bulkacties voor verlanglijstproducten. Toestemmingscontroles " +"zijn geïntegreerd om ervoor te zorgen dat gebruikers alleen hun eigen " +"verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " +"verleend." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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 " +"gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " +"omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Fout bij geocodering: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +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 " +"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 new file mode 100644 index 00000000..9cd0daa4 Binary files /dev/null and b/engine/core/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.po b/engine/core/locale/no_NO/LC_MESSAGES/django.po new file mode 100644 index 00000000..2859204b --- /dev/null +++ b/engine/core/locale/no_NO/LC_MESSAGES/django.po @@ -0,0 +1,3499 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: no-no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Unik ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"Unik ID brukes til å identifisere alle databaseobjekter på en sikker måte" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Er aktiv" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Opprettet" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Når objektet først dukket opp i databasen" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modifisert" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Når objektet sist ble redigert" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Oversettelser" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Generelt" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relasjoner" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "ytterligere informasjon" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Tidsstempler" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Utvalgte elementer har blitt aktivert!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Utvalgte elementer har blitt deaktivert!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Attributtverdier" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Bilde" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Bilder" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Lager" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Aksjer" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Bestill produkt" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Barn" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfigurer" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Kjerne" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Ferdig" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Leverer" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Leveres" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Avlyst" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Mislyktes" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Avventer" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Godkjent" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Penger returnert" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Betaling" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Vellykket" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "OpenAPI-skjema i valgt format med valgt språk" + +#: engine/core/docs/drf/views.py:33 +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 "" +"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:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Få en liste over språk som støttes" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Hent applikasjonens eksponerbare parametere" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Be om en CORSed URL. Bare https er tillatt." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Søk mellom produkter, kategorier og merker" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Globalt søkeendepunkt for å søke på tvers av prosjektets tabeller" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Kjøp en ordre som en bedrift" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Kjøp en ordre som en bedrift, ved hjelp av de angitte `produktene` med " +"`product_uuid` og `attributter`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "laste ned en digital ressurs fra en kjøpt digital bestilling" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Liste over alle attributtgrupper (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Hent en enkelt attributtgruppe (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Opprett en attributtgruppe" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Slett en attributtgruppe" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Skriv om en eksisterende attributtgruppe for å lagre ikke-redigerbare " +"attributter" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Liste over alle attributter (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Hent et enkelt attributt (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Opprett et attributt" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Slett et attributt" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Skriv om et eksisterende attributt for å lagre ikke-redigerbare attributter" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Skriv om noen av feltene i et eksisterende attributt for å lagre ikke-" +"redigerbare felt" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Liste over alle attributtverdier (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Hent en enkelt attributtverdi (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Opprett en attributtverdi" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Slett en attributtverdi" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Omskrive en eksisterende attributtverdi for å lagre ikke-redigerbare " +"attributter" + +#: engine/core/docs/drf/viewsets.py:186 +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" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Liste over alle kategorier (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Hent en enkelt kategori (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Kategori UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Opprett en kategori" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Slett en kategori" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Skriv om en eksisterende kategori som lagrer ikke-redigerbare filer" + +#: 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 "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta-øyeblikksbilde" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returnerer et øyeblikksbilde av kategoriens SEO-metadata" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +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 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" +msgstr "" +"Søk etter store og små bokstaver på tvers av 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" +msgstr "Filtrer ordrer med buy_time >= denne ISO 8601-datoen" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrer bestillinger med buy_time <= denne ISO 8601-datoen" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrer etter nøyaktig ordre UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtrer etter nøyaktig bestillings-ID som kan leses av mennesker" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "Filtrer etter brukerens e-post (store og små bokstaver er ufølsomme)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrer etter brukerens UUID" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +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')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Hent en enkelt kategori (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Bestill UUID eller menneskelig lesbar id" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Opprett et attributt" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Fungerer ikke for brukere som ikke er ansatte." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Slett et attributt" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Skriv om en eksisterende kategori som lagrer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Innkjøpspris på bestillingstidspunktet" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Fullfører kjøpsordren. Hvis `force_balance` brukes, fullføres kjøpet ved " +"hjelp av brukerens saldo; hvis `force_payment` brukes, iverksettes en " +"transaksjon." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "hente en brukers nåværende ventende ordre" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "kjøpe en ordre uten å opprette konto" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "fullfører bestillingen for en ikke-registrert bruker." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Legg til et produkt i bestillingen" + +#: engine/core/docs/drf/viewsets.py:421 +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`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" +"Legg til en liste over produkter som skal bestilles, antall vil ikke telle" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Legger til en liste med produkter i en bestilling ved hjelp av de angitte " +"`product_uuid` og `attributtene`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Fjern et produkt fra bestillingen" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Fjerner et produkt fra en bestilling ved hjelp av de angitte `product_uuid` " +"og `attributtene`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Fjern et produkt fra bestillingen, antall vil ikke telle med" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Fjerner en liste med produkter fra en bestilling ved hjelp av de angitte " +"`product_uuid` og `attributtene`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Liste over alle attributter (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"For brukere som ikke er ansatte, returneres bare deres egne ønskelister." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Hent et enkelt attributt (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Opprett et attributt" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Fungerer ikke for brukere som ikke er ansatte." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Slett et attributt" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Skriv om et eksisterende attributt for å lagre ikke-redigerbare attributter" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Skriv om noen av feltene i et eksisterende attributt for å lagre ikke-" +"redigerbare felt" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "hente en brukers nåværende ventende ønskeliste" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "henter en aktuell ventende ønskeliste for en autentisert bruker" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Legg til et produkt i bestillingen" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Legger til et produkt på en ønskeliste ved hjelp av den angitte " +"`product_uuid`." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +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`." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Legg til mange produkter på ønskelisten" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Legger til mange produkter på en ønskeliste ved hjelp av de angitte " +"`product_uuids`." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Fjern et produkt fra bestillingen" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Fjerner mange produkter fra en ønskeliste ved hjelp av de angitte " +"`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" +"• **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" +"`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" +"Eksempler: \n" +"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" +"`b64-beskrivelse=icontains-aGVhdC1jb2xk`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "Liste over alle produkter (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" +"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 +msgid "retrieve a single product (detailed view)" +msgstr "Hent et enkelt produkt (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Skriv om et eksisterende produkt, og behold ikke-redigerbare felt" + +#: 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 "" +"Oppdater noen av feltene i et eksisterende produkt, men behold feltene som " +"ikke kan redigeres" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Slett et produkt" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "viser alle tillatte tilbakemeldinger for et produkt" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Returnerer et øyeblikksbilde av produktets SEO-metadata" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Liste over alle adresser" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Hent en enkelt adresse" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Opprett en ny adresse" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Slett en adresse" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Oppdater en hel adresse" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Delvis oppdatering av en adresse" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Autofullfør adresseinndata" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Spørringsstreng for rådata, vennligst legg til data fra geo-IP-sluttpunkt" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "begrenser resultatmengden, 1 < grense < 10, standard: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "liste opp alle tilbakemeldinger (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "hente en enkelt tilbakemelding (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "skape en tilbakemelding" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "slette en tilbakemelding" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" +"omskrive en eksisterende tilbakemelding som lagrer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"omskrive noen felter i en eksisterende tilbakemelding og lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "liste opp alle ordre-produkt-relasjoner (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "hente en enkelt ordre-produkt-relasjon (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "opprette en ny ordre-produkt-relasjon" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "erstatte en eksisterende ordre-produkt-relasjon" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "delvis oppdatere en eksisterende ordre-produkt-relasjon" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "slette en ordre-produkt-relasjon" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Liste over alle merker (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Hent ett enkelt merke (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Merkevare UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Skap en merkevare" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Slett et merke" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" +"Skriv om en eksisterende merkevare som sparer ikke-redigerbare produkter" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Liste over alle leverandører (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Hent en enkelt leverandør (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Opprett en leverandør" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Slett en leverandør" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Skriv om en eksisterende leverandør som lagrer ikke-redigerbare filer" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Liste over alle produktbilder (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Hent et enkelt produktbilde (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Lag et produktbilde" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Slett et produktbilde" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Skriv om et eksisterende produktbilde og lagre ikke-redigerbare elementer" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Liste over alle kampanjekoder (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Hent en enkelt kampanjekode (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Opprett en kampanjekode" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Slett en kampanjekode" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" +"Skriv om en eksisterende kampanjekode for å lagre ikke-redigerbare koder" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Liste over alle kampanjer (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Hent en enkelt kampanje (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Opprett en kampanje" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Slett en kampanje" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" +"Skriv om en eksisterende kampanje for å lagre ikke-redigerbare elementer" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Liste over alle aksjer (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Hent en enkelt aksje (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Opprett en lagerpost" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Slett en lagerpost" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "Skriv om en eksisterende lagerpost og lagre ikke-redigerbare varer" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Liste over alle produkttagger (enkel visning)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Hent en enkelt produkttagg (detaljert visning)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Opprett en produkttagg" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Slett en produkttagg" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" +"Skriv om en eksisterende produkttagg for å lagre ikke-redigerbare produkter" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" +"redigerbare" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Ingen søkeord oppgitt." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Søk" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Navn" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Kategorier" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Kategorier Snegler" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tagger" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Min pris" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Maks pris" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Er aktiv" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Merkevare" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Egenskaper" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Antall" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Snegl" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Er Digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Inkluder underkategorier" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Inkluder personlig bestilte produkter" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Det må finnes en category_uuid for å bruke include_subcategories-flagget" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Søk (ID, produktnavn eller delenummer)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Kjøpt etter (inklusive)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Kjøpt før (inkludert)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Brukerens e-post" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "Bruker UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Menneskelig lesbar ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Foreldre" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Hele kategorien (har minst 1 produkt eller ikke)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Nivå" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Produkt UUID" + +#: 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:41 +msgid "data to store in cache" +msgstr "Data som skal lagres i hurtigbufferen" + +#: 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:47 +msgid "cached data" +msgstr "Bufret data" + +#: 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:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "Bare nettadresser som begynner med http(s):// er tillatt" + +#: 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: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: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:137 +msgid "remove all products from the order" +msgstr "Fjern alle produktene fra bestillingen" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Kjøp en ordre" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Fjern/legg til" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Vennligst oppgi verdien `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Legg til et produkt i bestillingen" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "Fjern et produkt fra bestillingen" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "Fjern et produkt fra bestillingen" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "Fjern et produkt fra bestillingen" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "Kjøp en ordre" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "Legg til eller slett en tilbakemelding for ordreproduktet" + +#: 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: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:582 +msgid "original address string provided by the user" +msgstr "Opprinnelig adressestreng oppgitt av brukeren" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} eksisterer ikke: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - fungerer som en drøm" + +#: 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:95 +msgid "grouped attributes" +msgstr "Grupperte attributter" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Grupper av attributter" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Merkevarer" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Kategorier" + +#: 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: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." + +#: 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:205 +msgid "tags for this category" +msgstr "Tagger for denne kategorien" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produkter i denne kategorien" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Leverandører" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Breddegrad (Y-koordinat)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Lengdegrad (X-koordinat)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Hvordan" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Representerer tilbakemeldinger fra en bruker." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Tilbakemeldinger" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Faktureringsadresse" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Totalpris for denne bestillingen" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Er alle produktene i bestillingen digitale" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Transaksjoner for denne bestillingen" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Bestillinger" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Bilde-URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Bilder av produktet" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Tilbakemeldinger" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Attributtgrupper" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Pris" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Antall" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Antall tilbakemeldinger" + +#: 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:484 +msgid "discount price" +msgstr "Rabattert pris" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produkter" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promokoder" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produkter på salg" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Kampanjer" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Leverandør" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produkt" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Ønskelister" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Merkede produkter" + +#: 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:665 +msgid "tagged categories" +msgstr "Merkede kategorier" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Kategorier' tagger" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Prosjektets navn" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Selskapets navn" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Selskapets adresse" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Telefonnummer til selskapet" + +#: 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" + +#: engine/core/graphene/object_types.py:681 +msgid "email host user" +msgstr "E-post vert bruker" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Maksimalt beløp for betaling" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Minimumsbeløp for betaling" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analysedata" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Annonsedata" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Konfigurasjon" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Språkkode" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Navn på språk" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Språkflagg, hvis det finnes :)" + +#: 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 +msgid "products search results" +msgstr "Søkeresultater for produkter" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Søkeresultater for produkter" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Foreldre til denne gruppen" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Overordnet attributtgruppe" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Attributtgruppens navn" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Attributtgruppe" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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ø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 " +"som gjør den egnet for bruk i systemer som samhandler med " +"tredjepartsleverandører." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Lagrer legitimasjon og endepunkter som kreves for leverandørens API-" +"kommunikasjon" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Autentiseringsinformasjon" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Definer påslag for produkter som hentes fra denne leverandøren" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Leverandørens påslagsprosent" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Navn på denne leverandøren" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Leverandørens navn" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "svarfil" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "leverandørens siste behandlingssvar" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Leverandørens integrasjonsfilbane" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Integreringsvei" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +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 " +"intern tagg-identifikator og et brukervennlig visningsnavn. Den støtter " +"operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for " +"administrative formål." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Intern tagg-identifikator for produkttaggen" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tagg navn" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Brukervennlig navn for produkttaggen" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Visningsnavn for taggen" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Produktmerke" + +#: engine/core/models.py:229 +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 "" +"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." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "kategorimerke" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "kategorikoder" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +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 " +"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 " +"grupperinger i en applikasjon, slik at brukere eller administratorer kan " +"spesifisere navn, beskrivelse og hierarki for kategoriene, samt tildele " +"attributter som bilder, tagger eller prioritet." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Last opp et bilde som representerer denne kategorien" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Kategori bilde" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Definer en påslagsprosent for produkter i denne kategorien" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Overordnet til denne kategorien for å danne en hierarkisk struktur" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Overordnet kategori" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Navn på kategori" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Oppgi et navn for denne kategorien" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Legg til en detaljert beskrivelse for denne kategorien" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Beskrivelse av kategori" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Prioritet" + +#: engine/core/models.py:438 +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." +msgstr "" +"Representerer et merkevareobjekt i systemet. Denne klassen håndterer " +"informasjon og attributter knyttet til et merke, inkludert navn, logoer, " +"beskrivelse, tilknyttede kategorier, en unik slug og " +"prioriteringsrekkefølge. Den gjør det mulig å organisere og representere " +"merkerelaterte data i applikasjonen." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Navnet på dette merket" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Merkenavn" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Last opp en logo som representerer dette varemerket" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Merkevare lite image" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Last opp en stor logo som representerer dette varemerket" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Merkevare med stort image" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Legg til en detaljert beskrivelse av merket" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Varemerkebeskrivelse" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Valgfrie kategorier som dette merket er assosiert med" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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, " +"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." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Leverandøren som leverer dette produktet lagerfører" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Tilknyttet leverandør" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Sluttpris til kunden etter påslag" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Salgspris" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Produktet som er knyttet til denne lagerposten" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Tilhørende produkt" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Prisen som er betalt til leverandøren for dette produktet" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Leverandørens innkjøpspris" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Tilgjengelig mengde av produktet på lager" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Antall på lager" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Leverandørens SKU for identifisering av produktet" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Leverandørens SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digital fil" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Systemattributter" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Lageroppføringer" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Representerer et produkt med attributter som kategori, merke, tagger, " +"digital status, navn, beskrivelse, delenummer og slug. Tilbyr relaterte " +"verktøyegenskaper for å hente vurderinger, antall tilbakemeldinger, pris, " +"antall og totalt antall bestillinger. Designet for bruk i et system som " +"håndterer e-handel eller lagerstyring. Denne klassen samhandler med " +"relaterte modeller (for eksempel Category, Brand og ProductTag) og " +"administrerer hurtigbufring av egenskaper som brukes ofte, for å forbedre " +"ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende " +"informasjon i en applikasjon." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Kategori dette produktet tilhører" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Du kan eventuelt knytte dette produktet til et varemerke" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Angir om dette produktet leveres digitalt" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Er produktet digitalt" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Gi produktet et tydelig navn som identifiserer det" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Produktnavn" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Legg til en detaljert beskrivelse av produktet" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Produktbeskrivelse" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Delenummer for dette produktet" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Delenummer" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Lagerholdsenhet for dette produktet" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"Representerer et attributt i systemet. Denne klassen brukes til å definere " +"og administrere attributter, som er data som kan tilpasses og knyttes til " +"andre enheter. Attributter har tilknyttede kategorier, grupper, verdityper " +"og navn. Modellen støtter flere typer verdier, blant annet streng, heltall, " +"float, boolsk, matrise og objekt. Dette gir mulighet for dynamisk og " +"fleksibel datastrukturering." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Gruppe av dette attributtet" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Streng" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Heltall" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Flyter" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolsk" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objekt" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Type av attributtets verdi" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Verditype" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Navn på dette attributtet" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Attributtets navn" + +#: engine/core/models.py:758 +msgid "is filterable" +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." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +msgstr "" +"Representerer en spesifikk verdi for et attributt som er knyttet til et " +"produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir " +"bedre organisering og dynamisk representasjon av produktegenskaper." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attributt for denne verdien" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Det spesifikke produktet som er knyttet til dette attributtets verdi" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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 " +"produkter og bestemme visningsrekkefølgen. Den inneholder også en " +"tilgjengelighetsfunksjon med alternativ tekst for bildene." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Gi alternativ tekst til bildet for tilgjengelighet" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Alt-tekst til bilder" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Last opp bildefilen for dette produktet" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Produktbilde" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Bestemmer rekkefølgen bildene skal vises i" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Prioritet på skjermen" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Produktet som dette bildet representerer" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Produktbilder" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"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 " +"varene i kampanjen." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Prosentvis rabatt for de valgte produktene" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Rabattprosent" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Oppgi et unikt navn for denne kampanjen" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Navn på kampanjen" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Beskrivelse av kampanjen" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Velg hvilke produkter som er inkludert i denne kampanjen" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Inkluderte produkter" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Markedsføring" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"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." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produkter som brukeren har merket som ønsket" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Bruker som eier denne ønskelisten" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Ønskelistens eier" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Ønskeliste" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"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 " +"funksjoner." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Dokumentarfilm" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Dokumentarfilmer" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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 " +"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 " +"datahåndteringen." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Adresselinje for kunden" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Adresselinje" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Gate" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Distrikt" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "By" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Postnummer" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Land" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Lagret JSON-svar fra geokodingstjenesten" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adresse" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresser" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +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 " +"for bruken av den. Den inneholder funksjonalitet for å validere og bruke " +"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" +msgstr "Unik kode som brukes av en bruker for å løse inn en rabatt" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Kampanjekode-identifikator" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Fast rabattbeløp" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Prosentvis rabatt hvis fast beløp ikke brukes" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Prosentvis rabatt" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Tidsstempel for når kampanjekoden utløper" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Slutt gyldighetstid" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Tidsstempel som denne kampanjekoden er gyldig fra" + +#: engine/core/models.py:1115 +msgid "start validity time" +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å" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Tidsstempel for bruk" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Tilordnet bruker" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Kampanjekode" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Kampanjekoder" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge " +"eller ingen av delene." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promokoden har allerede blitt brukt" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Faktureringsadressen som brukes for denne bestillingen" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Valgfri kampanjekode brukt på denne bestillingen" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Anvendt kampanjekode" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Leveringsadressen som brukes for denne bestillingen" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Leveringsadresse" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Ordrens nåværende status i livssyklusen" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Order status" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON-struktur for varsler som skal vises til brukere, i admin-grensesnittet " +"brukes tabellvisningen" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON-representasjon av ordreattributter for denne ordren" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Brukeren som har lagt inn bestillingen" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Bruker" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Tidsstempel for når bestillingen ble fullført" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Kjøp tid" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "En menneskelig lesbar identifikator for bestillingen" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "ID som kan leses av mennesker" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Bestilling" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "En bruker kan bare ha én ventende ordre om gangen!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"Du kan ikke legge til produkter i en bestilling som ikke er en pågående " +"bestilling" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Du kan ikke legge til inaktive produkter i bestillingen" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "" +"Du kan ikke legge til flere produkter enn det som er tilgjengelig på lager" + +#: 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 "" +"Du kan ikke fjerne produkter fra en bestilling som ikke er en pågående " +"bestilling" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} finnes ikke med spørring <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promokoden finnes ikke" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "Du kan bare kjøpe fysiske produkter med oppgitt leveringsadresse!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adressen eksisterer ikke" + +#: 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 "" +"Du kan ikke kjøpe for øyeblikket, vennligst prøv igjen om noen minutter." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Ugyldig kraftverdi" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Du kan ikke kjøpe en tom ordre!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Du kan ikke kjøpe en ordre uten en bruker!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "En bruker uten saldo kan ikke kjøpe med saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Utilstrekkelige midler til å fullføre bestillingen" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: " +"kundenavn, kundens e-postadresse, kundens telefonnummer" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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 " +"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 " +"og administrere tilbakemeldingsdata på en effektiv måte." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Brukerkommentarer om deres erfaringer med produktet" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Refererer til det spesifikke produktet i en ordre som denne tilbakemeldingen" +" handler om" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Relatert bestillingsprodukt" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Brukertildelt vurdering for produktet" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Produktvurdering" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Representerer produkter som er knyttet til bestillinger og deres " +"attributter. OrderProduct-modellen inneholder informasjon om et produkt som " +"er en del av en bestilling, inkludert detaljer som innkjøpspris, antall, " +"produktattributter og status. Den håndterer varslinger til brukeren og " +"administratorer, og håndterer operasjoner som å returnere produktsaldoen " +"eller legge til tilbakemeldinger. Modellen inneholder også metoder og " +"egenskaper som støtter forretningslogikk, for eksempel beregning av " +"totalpris eller generering av en nedlastings-URL for digitale produkter. " +"Modellen integreres med Order- og Product-modellene og lagrer en referanse " +"til disse." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Prisen kunden betalte for dette produktet på kjøpstidspunktet" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Innkjøpspris på bestillingstidspunktet" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Interne kommentarer for administratorer om dette bestilte produktet" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Interne kommentarer" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Brukervarsler" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON-representasjon av dette elementets attributter" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Bestilte produktegenskaper" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "" +"Referanse til den overordnede bestillingen som inneholder dette produktet" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Overordnet ordre" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Antall av dette spesifikke produktet i bestillingen" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Produktmengde" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Nåværende status for dette produktet i bestillingen" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status for produktlinjen" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct må ha en tilknyttet ordre!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Feil handling angitt for tilbakemelding: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "du kan ikke gi tilbakemelding på en bestilling som ikke er mottatt" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Navn" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL-adressen til integrasjonen" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Legitimasjon for autentisering" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Du kan bare ha én standard CRM-leverandør" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Ordre CRM-kobling" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "CRM-koblinger for bestillinger" + +#: engine/core/models.py:1947 +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." +msgstr "" +"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 " +"for å generere en URL for nedlasting av ressursen når den tilknyttede " +"bestillingen har status som fullført." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Last ned" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Nedlastinger" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"du må oppgi en kommentar, vurdering og bestille produkt-uid for å legge til " +"tilbakemelding." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Hjem" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Kontakt oss" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Om oss" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Kundemiks (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nye kunder" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Tilbakevendende kunder" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Ingen kundeaktivitet de siste 30 dagene." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Daglig salg" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Bestillinger (AVSLUTTET)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Brutto inntekter" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Bestillinger" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Dashbord" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Oversikt over inntekter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Netto inntekter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Skatter og avgifter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Retur" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Brutto inntekter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Ingen dato" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Netto inntekter" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Refusjonsgrad" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Returneres" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Lav lagerbeholdning" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Ingen varer med lav lagerbeholdning." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Flest returnerte produkter (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Ingen returer i løpet av de siste 30 dagene." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Mest ønskede produkt" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Ingen data ennå." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Mest populære produkt" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Hurtigkoblinger" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Ingen lenker tilgjengelig." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Leveres vs. digitalt (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Leveres" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Toppkategorier etter antall (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Ingen kategorisalg de siste 30 dagene." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site admin" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Ordrebekreftelse" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hallo %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" 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:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Totalt" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Totalpris" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Hvis du har spørsmål, er du velkommen til å kontakte vår support på " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Med vennlig hilsen,
teamet %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Alle rettigheter forbeholdt" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Bestilling levert" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hallo %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Vi har behandlet bestillingen din №%(order_uuid)s! Nedenfor er detaljene i " +"bestillingen din:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"ytterligere\n" +" informasjon" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Verdi" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Hvis du har spørsmål, er du velkommen til å kontakte vår support på " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Med vennlig hilsen,
teamet %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Nøkkel" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Legg til rad" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promokode innvilget" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Takk for at du bor hos oss! Vi har gitt deg en promokode\n" +" for" + +#: 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" +" the details of your order:" +msgstr "" +"Takk for bestillingen din! Vi er glade for å kunne bekrefte kjøpet ditt. " +"Nedenfor er detaljene for bestillingen din:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Fraktpris" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Bestillingen din vil bli levert til følgende adresse:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Med vennlig hilsen, %(config.PROJECT_NAME)s-teamet" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"Alle rettigheter\n" +" forbeholdt" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Både data og tidsavbrudd er påkrevd" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | kontakt oss initiert" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | ordrebekreftelse" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | bestilling levert" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Du har ikke tillatelse til å utføre denne handlingen." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Parameteren NOMINATIM_URL må være konfigurert!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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." + +#: engine/core/views.py:106 +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 "" +"Håndterer det detaljerte visningssvaret for et områdekart. Denne funksjonen " +"behandler forespørselen, henter det aktuelle detaljsvaret for områdekartet " +"og angir overskriften Content-Type for XML." + +#: engine/core/views.py:141 +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:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Returnerer nettstedets parametere som et JSON-objekt." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Håndterer cache-operasjoner som lesing og innstilling av cachedata med en " +"spesifisert nøkkel og tidsavbrudd." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Håndterer innsendinger av `kontakt oss`-skjemaer." + +#: engine/core/views.py:240 +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." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Håndterer globale søk." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid er påkrevd" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "ordreproduktet eksisterer ikke" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Du kan bare laste ned den digitale ressursen én gang" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Ordreproduktet har ikke et produkt" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon ble ikke funnet" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Omdirigerer forespørselen til admin-indekssiden. Funksjonen håndterer " +"innkommende HTTP-forespørsler og omdirigerer dem til Djangos indeksside for " +"administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å " +"håndtere HTTP-omdirigeringen." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Returnerer gjeldende versjon av eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Inntekter og bestillinger (siste %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definerer et visningssett for håndtering av Evibes-relaterte operasjoner. " +"EvibesViewSet-klassen arver fra ModelViewSet og tilbyr funksjonalitet for " +"håndtering av handlinger og operasjoner på Evibes-enheter. Den inkluderer " +"støtte for dynamiske serialiseringsklasser basert på den aktuelle " +"handlingen, tilpassbare tillatelser og gjengivelsesformater." + +#: 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." +msgstr "" +"Representerer et visningssett for håndtering av AttributeGroup-objekter. " +"Håndterer operasjoner knyttet til AttributeGroup, inkludert filtrering, " +"serialisering og henting av data. Denne klassen er en del av applikasjonens " +"API-lag og gir en standardisert måte å behandle forespørsler og svar for " +"AttributeGroup-data på." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +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." + +#: 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." +msgstr "" +"Et visningssett for administrasjon av AttributeValue-objekter. Dette " +"visningssettet inneholder funksjonalitet for å liste opp, hente, opprette, " +"oppdatere og slette AttributeValue-objekter. Det integreres med Django REST " +"Framework's viewset-mekanismer og bruker passende serialisatorer for ulike " +"handlinger. Filtreringsmuligheter tilbys gjennom DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Administrerer visninger for Category-relaterte operasjoner. CategoryViewSet-" +"klassen er ansvarlig for å håndtere operasjoner knyttet til Category-" +"modellen i systemet. Den støtter henting, filtrering og serialisering av " +"kategoridata. Visningssettet håndhever også tillatelser for å sikre at bare " +"autoriserte brukere har tilgang til bestemte data." + +#: 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 "" +"Representerer et visningssett for håndtering av Brand-instanser. Denne " +"klassen tilbyr funksjonalitet for spørring, filtrering og serialisering av " +"Brand-objekter. Den bruker Djangos ViewSet-rammeverk for å forenkle " +"implementeringen av API-sluttpunkter for Brand-objekter." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Håndterer operasjoner knyttet til `Product`-modellen i systemet. Denne " +"klassen gir et visningssett for håndtering av produkter, inkludert " +"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." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +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 " +"REST-rammeverket." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"Representasjon av et visningssett som håndterer Feedback-objekter. Denne " +"klassen håndterer operasjoner knyttet til Feedback-objekter, inkludert " +"opplisting, filtrering og henting av detaljer. Formålet med dette " +"visningssettet er å tilby forskjellige serialisatorer for ulike handlinger " +"og implementere rettighetsbasert håndtering av tilgjengelige " +"tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker " +"Djangos filtreringssystem for å spørre etter data." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet for håndtering av bestillinger og relaterte operasjoner. Denne " +"klassen inneholder funksjonalitet for å hente, endre og administrere " +"ordreobjekter. Den inneholder ulike endepunkter for håndtering av " +"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." + +#: 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 " +"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 " +"tilbakemeldinger på OrderProduct-instanser" + +#: 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: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." + +#: 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:927 +msgid "Handles operations related to Stock data in the system." +msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." + +#: 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 " +"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 administrasjon av ønskelisteoperasjoner. WishlistViewSet " +"inneholder endepunkter for interaksjon med en brukers ønskeliste, noe som " +"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." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Feil i geokoding: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Håndterer operasjoner knyttet til produkttagger i applikasjonen. Denne " +"klassen tilbyr funksjonalitet for henting, filtrering og serialisering av " +"Product Tag-objekter. Den støtter fleksibel filtrering på spesifikke " +"attributter ved hjelp av den spesifiserte filterbackenden, og bruker " +"dynamisk forskjellige serialisatorer basert på handlingen som utføres." diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.mo b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo new file mode 100644 index 00000000..00f108df Binary files /dev/null and b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.po b/engine/core/locale/pl_PL/LC_MESSAGES/django.po new file mode 100644 index 00000000..51b389cb --- /dev/null +++ b/engine/core/locale/pl_PL/LC_MESSAGES/django.po @@ -0,0 +1,3509 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: pl-pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Unikalny identyfikator" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"Unikalny identyfikator służy do jednoznacznej identyfikacji dowolnego " +"obiektu bazy danych" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Jest aktywny" + +#: engine/core/abstract.py:21 +msgid "" +"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ń." + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Utworzony" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Kiedy obiekt po raz pierwszy pojawił się w bazie danych" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Zmodyfikowany" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Kiedy obiekt był ostatnio edytowany" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Tłumaczenia" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Ogólne" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relacje" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "dodatkowe informacje" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadane" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Znaczniki czasu" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Wybrane elementy zostały aktywowane!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Wybrane elementy zostały dezaktywowane!" + +#: 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: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:172 +msgid "image" +msgstr "Obraz" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Obrazy" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stan magazynowy" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Akcje" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Zamów produkt" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Dzieci" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfiguracja" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Rdzeń" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Zakończony" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Dostarczanie" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Dostarczone" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Anulowane" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Nie powiodło się" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "W toku" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Przyjęte" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Zwrócone pieniądze" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Płatność" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Udany" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Schemat OpenAPI w wybranym formacie z wybranym językiem" + +#: engine/core/docs/drf/views.py:33 +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 "" +"Schemat OpenApi3 dla tego interfejsu API. Format można wybrać poprzez " +"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:37 +msgid "cache I/O" +msgstr "Pamięć podręczna we/wy" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Pobierz listę obsługiwanych języków" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Uzyskaj dostępne parametry aplikacji" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Żądanie adresu URL CORSed. Dozwolony jest tylko protokół https." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Wyszukiwanie między produktami, kategoriami i markami" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Globalny punkt końcowy wyszukiwania do zapytań w tabelach projektu" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Zakup zamówienia jako firma" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Kup zamówienie jako firma, używając dostarczonych `products` z " +"`product_uuid` i `attributes`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "pobranie zasobu cyfrowego z zakupionego zamówienia cyfrowego" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Lista wszystkich grup atrybutów (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Pobieranie pojedynczej grupy atrybutów (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Tworzenie grupy atrybutów" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Usuwanie grupy atrybutów" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Przepisanie istniejącej grupy atrybutów z zachowaniem atrybutów " +"nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Lista wszystkich atrybutów (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Utwórz atrybut" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Usuwanie atrybutu" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów " +"nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Lista wszystkich wartości atrybutów (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Pobieranie wartości pojedynczego atrybutu (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Tworzenie wartości atrybutu" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Usuwanie wartości atrybutu" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Przepisanie istniejącej wartości atrybutu z zachowaniem atrybutów " +"nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:186 +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" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Lista wszystkich kategorii (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Identyfikator UUID kategorii lub slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Utwórz kategorię" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Usuwanie kategorii" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy" + +#: 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 "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Zwraca migawkę metadanych SEO kategorii." + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Lista wszystkich kategorii (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"W przypadku użytkowników niebędących pracownikami zwracane są tylko ich " +"własne zamówienia." + +#: 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" +msgstr "" +"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" +msgstr "Filtruj zamówienia z buy_time >= ta data ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtruj zamówienia z buy_time <= ten ISO 8601 datetime" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtruj według dokładnego identyfikatora UUID zamówienia" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "" +"Filtrowanie według dokładnego, czytelnego dla człowieka identyfikatora " +"zamówienia" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filtrowanie według adresu e-mail użytkownika (dokładne dopasowanie z " +"uwzględnieniem wielkości liter)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +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)" + +#: 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')." +msgstr "" +"Kolejność według jednego z: uuid, human_readable_id, user_email, user, " +"status, created, modified, buy_time, random. Prefiks z \"-\" dla malejącego " +"(np. \"-buy_time\")." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +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" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Utwórz atrybut" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Nie działa dla użytkowników spoza personelu." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Usuwanie atrybutu" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Cena zakupu w momencie zamówienia" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Finalizuje zakup zamówienia. Jeśli użyto `force_balance`, zakup jest " +"finalizowany przy użyciu salda użytkownika; Jeśli użyto `force_payment`, " +"transakcja jest inicjowana." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "pobieranie bieżącego oczekującego zamówienia użytkownika" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "zakup zamówienia bez tworzenia konta" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finalizuje zakup zamówienia dla niezarejestrowanego użytkownika." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Dodawanie produktu do zamówienia" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Dodaje produkt do zamówienia przy użyciu podanych `product_uuid` i " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Dodaj listę produktów do zamówienia, ilości nie będą liczone." + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Dodaje listę produktów do zamówienia przy użyciu podanych `product_uuid` i " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Usunięcie produktu z zamówienia" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Usuwa produkt z zamówienia przy użyciu podanego `product_uuid` i " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Usuń produkt z zamówienia, ilości nie będą liczone" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Usuwa listę produktów z zamówienia przy użyciu podanych `product_uuid` i " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Lista wszystkich atrybutów (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"W przypadku użytkowników niebędących pracownikami zwracane są tylko ich " +"własne listy życzeń." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Utwórz atrybut" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Nie działa dla użytkowników spoza personelu." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Usuwanie atrybutu" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów " +"nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "pobieranie bieżącej oczekującej listy życzeń użytkownika" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "pobiera bieżącą oczekującą listę życzeń uwierzytelnionego użytkownika" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Dodawanie produktu do zamówienia" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "Dodaje produkt do listy życzeń używając podanego `product_uuid`" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Usunięcie produktu z listy życzeń" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Usuwa produkt z listy życzeń przy użyciu podanego identyfikatora " +"`product_uuid`." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Dodaj wiele produktów do listy życzeń" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Dodaje wiele produktów do listy życzeń przy użyciu podanych `product_uuids`" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Usunięcie produktu z zamówienia" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Usuwa wiele produktów z listy życzeń przy użyciu podanych `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" +"• **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" +"`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" +"Przykłady: \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 +msgid "list all products (simple view)" +msgstr "Lista wszystkich produktów (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" +"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 +msgid "retrieve a single product (detailed view)" +msgstr "Pobieranie pojedynczego produktu (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Przepisz istniejący produkt, zachowując nieedytowalne pola" + +#: 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 "" +"Aktualizacja niektórych pól istniejącego produktu z zachowaniem pól " +"nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Usuń produkt" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "wyświetla wszystkie dozwolone informacje zwrotne dotyczące produktu" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Zwraca migawkę metadanych SEO produktu." + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Lista wszystkich adresów" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Pobieranie pojedynczego adresu" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Utwórz nowy adres" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Usuwanie adresu" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Aktualizacja całego adresu" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Częściowa aktualizacja adresu" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Wprowadzanie adresu w trybie autouzupełniania" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Ciąg zapytania danych nieprzetworzonych, należy dołączyć dane z punktu " +"końcowego geo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "ogranicza ilość wyników, 1 < limit < 10, domyślnie: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "lista wszystkich opinii (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "pobieranie pojedynczej informacji zwrotnej (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "utworzyć informację zwrotną" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "usuwanie opinii" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" +"przepisanie istniejącej informacji zwrotnej z zachowaniem elementów " +"nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "lista wszystkich relacji zamówienie-produkt (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "pobranie pojedynczej relacji zamówienie-produkt (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "utworzyć nową relację zamówienie-produkt" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "zastąpić istniejącą relację zamówienie-produkt" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "częściowa aktualizacja istniejącej relacji zamówienie-produkt" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "usunąć relację zamówienie-produkt" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Lista wszystkich marek (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Pobieranie pojedynczej marki (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Brand UUID lub slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Stwórz markę" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Usuń markę" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Przepisz istniejącą markę, oszczędzając materiały nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Lista wszystkich sprzedawców (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Pobieranie pojedynczego dostawcy (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Utwórz sprzedawcę" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Usuń sprzedawcę" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Przepisz istniejącego dostawcę, zapisując nieedytowalne elementy" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Lista wszystkich zdjęć produktów (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Pobieranie pojedynczego obrazu produktu (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Utwórz obraz produktu" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Usuwanie obrazu produktu" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "Przepisz istniejący obraz produktu, zapisując nieedytowalne elementy" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Lista wszystkich kodów promocyjnych (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Pobieranie pojedynczego kodu promocyjnego (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Utwórz kod promocyjny" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Usuń kod promocyjny" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" +"Przepisz istniejący kod promocyjny, oszczędzając nieedytowalne elementy" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Lista wszystkich promocji (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Pobieranie pojedynczej promocji (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Utwórz promocję" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Usuń promocję" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Przepisz istniejącą promocję, zapisując nieedytowalne elementy" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Lista wszystkich akcji (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Pobieranie pojedynczego zasobu (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Tworzenie rekordu zapasów" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Usuwanie rekordu zapasów" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Przepisanie istniejącego rekordu magazynowego z zachowaniem elementów " +"nieedytowalnych" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Lista wszystkich tagów produktów (widok prosty)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Pobieranie pojedynczego tagu produktu (widok szczegółowy)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Utwórz tag produktu" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Usuwanie tagu produktu" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Przepisz istniejący tag produktu, zapisując nieedytowalne elementy" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Przepisz niektóre pola istniejącej kategorii, zapisując elementy " +"nieedytowalne" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Nie podano wyszukiwanego hasła." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Wyszukiwanie" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Nazwa" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Kategorie" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Kategorie Ślimaki" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tagi" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Cena minimalna" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Maksymalna cena" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Jest aktywny" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Marka" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Atrybuty" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Ilość" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Ślimak" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Czy cyfrowy" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Uwzględnienie podkategorii" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Obejmuje produkty zamawiane osobiście" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "Aby użyć flagi include_subcategories, musi istnieć category_uuid" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Kupione po (włącznie)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Kupione wcześniej (włącznie)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "E-mail użytkownika" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID użytkownika" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Identyfikator czytelny dla człowieka" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Rodzic" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Poziom" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID produktu" + +#: 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:41 +msgid "data to store in cache" +msgstr "Dane do przechowywania w pamięci podręcznej" + +#: 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:47 +msgid "cached data" +msgstr "Dane w pamięci podręcznej" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Dodawanie produktu do zamówienia" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Usuń wszystkie produkty z zamówienia" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Kup zamówienie" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Usuń/Dodaj" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Podaj wartość `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Dodawanie produktu do zamówienia" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Usunięcie produktu z zamówienia" + +#: 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:510 +msgid "buy a product" +msgstr "Kup zamówienie" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "Dodawanie lub usuwanie opinii dla produktu zamówienia" + +#: 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: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:582 +msgid "original address string provided by the user" +msgstr "Oryginalny ciąg adresu podany przez użytkownika" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} nie istnieje: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - działa jak urok" + +#: 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:95 +msgid "grouped attributes" +msgstr "Atrybuty pogrupowane" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Grupy atrybutów" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Marki" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Kategorie" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Tagi dla tej kategorii" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produkty w tej kategorii" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Sprzedawcy" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Szerokość geograficzna (współrzędna Y)" + +#: 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:358 +msgid "comment" +msgstr "Jak" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Reprezentuje informacje zwrotne od użytkownika." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Informacje zwrotne" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Adres rozliczeniowy" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Całkowita cena tego zamówienia" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Transakcje dla tego zamówienia" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Zamówienia" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Adres URL obrazu" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Zdjęcia produktu" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Informacje zwrotne" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Grupy atrybutów" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Cena" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Ilość" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Liczba informacji zwrotnych" + +#: 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:484 +msgid "discount price" +msgstr "Cena rabatowa" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produkty" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promocodes" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produkty w sprzedaży" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promocje" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Sprzedawca" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produkt" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Listy życzeń" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Produkty Tagged" + +#: 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:665 +msgid "tagged categories" +msgstr "Kategorie oznaczone tagami" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Tagi kategorii" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Nazwa projektu" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Nazwa firmy" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Adres firmy" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Numer telefonu firmy" + +#: 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" + +#: engine/core/graphene/object_types.py:681 +msgid "email host user" +msgstr "Użytkownik hosta poczty e-mail" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Maksymalna kwota płatności" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Minimalna kwota płatności" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Dane analityczne" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Dane reklamowe" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Konfiguracja" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Kod języka" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Nazwa języka" + +#: 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: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 +msgid "products search results" +msgstr "Wyniki wyszukiwania produktów" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Wyniki wyszukiwania produktów" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Reprezentuje grupę atrybutów, która może być hierarchiczna. Klasa ta służy " +"do zarządzania i organizowania grup atrybutów. Grupa atrybutów może mieć " +"grupę nadrzędną, tworząc strukturę hierarchiczną. Może to być przydatne do " +"bardziej efektywnego kategoryzowania i zarządzania atrybutami w złożonym " +"systemie." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Rodzic tej grupy" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Grupa atrybutów nadrzędnych" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Nazwa grupy atrybutów" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Grupa atrybutów" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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 " +"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." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji " +"API dostawcy." + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Informacje o uwierzytelnianiu" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Procentowa marża sprzedawcy" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Nazwa tego sprzedawcy" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Nazwa sprzedawcy" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "plik odpowiedzi" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "odpowiedź sprzedawcy na ostatnie przetwarzanie" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Ścieżka do pliku integracji dostawcy" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Ścieżka integracji" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Reprezentuje znacznik produktu używany do klasyfikacji lub identyfikacji " +"produktów. Klasa ProductTag została zaprojektowana w celu unikalnej " +"identyfikacji i klasyfikacji produktów poprzez połączenie wewnętrznego " +"identyfikatora tagu i przyjaznej dla użytkownika nazwy wyświetlanej. " +"Obsługuje operacje eksportowane przez mixiny i zapewnia dostosowanie " +"metadanych do celów administracyjnych." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Wewnętrzny identyfikator tagu produktu" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Nazwa tagu" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Wyświetlana nazwa znacznika" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Etykieta produktu" + +#: engine/core/models.py:229 +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 "" +"Reprezentuje tag kategorii używany dla produktów. Ta klasa modeluje tag " +"kategorii, który może być używany do kojarzenia i klasyfikowania produktów. " +"Zawiera atrybuty dla wewnętrznego identyfikatora tagu i przyjaznej dla " +"użytkownika nazwy wyświetlanej." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "tag kategorii" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "tagi kategorii" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Reprezentuje jednostkę kategorii w celu organizowania i grupowania " +"powiązanych elementów w strukturze hierarchicznej. Kategorie mogą mieć " +"hierarchiczne relacje z innymi kategoriami, wspierając relacje rodzic-" +"dziecko. Klasa zawiera pola dla metadanych i reprezentacji wizualnej, które " +"służą jako podstawa dla funkcji związanych z kategoriami. Klasa ta jest " +"zwykle używana do definiowania i zarządzania kategoriami produktów lub " +"innymi podobnymi grupami w aplikacji, umożliwiając użytkownikom lub " +"administratorom określanie nazwy, opisu i hierarchii kategorii, a także " +"przypisywanie atrybutów, takich jak obrazy, tagi lub priorytety." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Prześlij obraz reprezentujący tę kategorię" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Obraz kategorii" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii." + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Kategoria nadrzędna" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Nazwa kategorii" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Podaj nazwę dla tej kategorii" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Dodaj szczegółowy opis dla tej kategorii" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Opis kategorii" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Priorytet" + +#: engine/core/models.py:438 +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." +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 " +"reprezentację danych związanych z marką w aplikacji." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Nazwa tej marki" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Nazwa marki" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Prześlij logo reprezentujące tę markę" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Mały wizerunek marki" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Prześlij duże logo reprezentujące tę markę" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Duży wizerunek marki" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Dodaj szczegółowy opis marki" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Opis marki" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Reprezentuje stan magazynowy produktu zarządzanego w systemie. Klasa ta " +"zapewnia szczegółowe informacje na temat relacji między dostawcami, " +"produktami i ich informacjami o zapasach, a także właściwościami związanymi " +"z zapasami, takimi jak cena, cena zakupu, ilość, SKU i zasoby cyfrowe. Jest " +"częścią systemu zarządzania zapasami, umożliwiając śledzenie i ocenę " +"produktów dostępnych od różnych dostawców." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Sprzedawca dostarczający ten produkt" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Powiązany sprzedawca" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Cena sprzedaży" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Produkt powiązany z tym wpisem magazynowym" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Produkt powiązany" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Cena zapłacona sprzedawcy za ten produkt" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Cena zakupu przez sprzedawcę" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Dostępna ilość produktu w magazynie" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Ilość w magazynie" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "SKU sprzedawcy" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Plik cyfrowy" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Atrybuty systemu" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Zapisy magazynowe" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Reprezentuje produkt z atrybutami takimi jak kategoria, marka, tagi, status " +"cyfrowy, nazwa, opis, numer części i slug. Zapewnia powiązane właściwości " +"narzędziowe do pobierania ocen, liczby opinii, ceny, ilości i całkowitej " +"liczby zamówień. Zaprojektowany do użytku w systemie obsługującym handel " +"elektroniczny lub zarządzanie zapasami. Klasa ta współdziała z powiązanymi " +"modelami (takimi jak Category, Brand i ProductTag) i zarządza buforowaniem " +"często używanych właściwości w celu poprawy wydajności. Służy do " +"definiowania i manipulowania danymi produktu i powiązanymi z nimi " +"informacjami w aplikacji." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Kategoria, do której należy ten produkt" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Opcjonalnie można powiązać ten produkt z marką" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Czy produkt jest cyfrowy?" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Wyraźna nazwa identyfikująca produkt" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Nazwa produktu" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Dodaj szczegółowy opis produktu" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Opis produktu" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Numer części dla tego produktu" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Numer części" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Jednostka magazynowa dla tego produktu" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"Reprezentuje atrybut w systemie. Ta klasa jest używana do definiowania i " +"zarządzania atrybutami, które są konfigurowalnymi fragmentami danych, które " +"mogą być powiązane z innymi jednostkami. Atrybuty mają powiązane kategorie, " +"grupy, typy wartości i nazwy. Model obsługuje wiele typów wartości, w tym " +"string, integer, float, boolean, array i object. Pozwala to na dynamiczną i " +"elastyczną strukturę danych." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Grupa tego atrybutu" + +#: engine/core/models.py:739 +msgid "string" +msgstr "String" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Integer" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Pływak" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Wartość logiczna" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Tablica" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Obiekt" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Typ wartości atrybutu" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Typ wartości" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Nazwa tego atrybutu" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Nazwa atrybutu" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "można filtrować" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Które atrybuty i wartości mogą być używane do filtrowania tej kategorii." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +msgstr "" +"Reprezentuje określoną wartość atrybutu powiązanego z produktem. Łączy " +"\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i " +"dynamiczną reprezentację cech produktu." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Atrybut tej wartości" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Konkretny produkt powiązany z wartością tego atrybutu" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Reprezentuje obraz produktu powiązany z produktem w systemie. Ta klasa jest " +"przeznaczona do zarządzania obrazami produktów, w tym funkcjonalnością " +"przesyłania plików graficznych, kojarzenia ich z określonymi produktami i " +"określania kolejności ich wyświetlania. Zawiera również funkcję dostępności " +"z tekstem alternatywnym dla obrazów." + +#: 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" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Tekst alternatywny obrazu" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Prześlij plik obrazu dla tego produktu" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Obraz produktu" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Określa kolejność wyświetlania obrazów" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Priorytet wyświetlania" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Produkt, który przedstawia ten obraz" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Zdjęcia produktów" + +#: engine/core/models.py:868 +msgid "" +"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." +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, " +"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." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Rabat procentowy na wybrane produkty" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Procent rabatu" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Podaj unikalną nazwę tej promocji" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Nazwa promocji" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Opis promocji" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Wybierz produkty objęte promocją" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Dołączone produkty" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promocja" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"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 " +"także wspierając operacje dodawania i usuwania wielu produktów jednocześnie." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Użytkownik posiadający tę listę życzeń" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Właściciel listy życzeń" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Lista życzeń" + +#: engine/core/models.py:985 +msgid "" +"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." +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 " +"funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " +"funkcje." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Film dokumentalny" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Filmy dokumentalne" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"Reprezentuje jednostkę adresu, która zawiera szczegóły lokalizacji i " +"powiązania z użytkownikiem. Zapewnia funkcjonalność przechowywania danych " +"geograficznych i adresowych, a także integrację z usługami geokodowania. " +"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 " +"również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " +"obsługę danych." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Linia adresu dla klienta" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Linia adresowa" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "ul." + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Okręg" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Miasto" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Kod pocztowy" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Kraj" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolocation Point(Longitude, Latitude)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adres" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresy" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Reprezentuje kod promocyjny, który może być wykorzystywany do udzielania " +"rabatów, zarządzania jego ważnością, typem rabatu i zastosowaniem. Klasa " +"PromoCode przechowuje szczegółowe informacje o kodzie promocyjnym, w tym " +"jego unikalny identyfikator, właściwości rabatu (kwota lub procent), okres " +"ważności, powiązanego użytkownika (jeśli istnieje) i status jego użycia. " +"Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do " +"zamówienia, zapewniając jednocześnie spełnienie ograniczeń." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Unikalny kod używany przez użytkownika do realizacji rabatu." + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Identyfikator kodu promocyjnego" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Stała kwota rabatu stosowana, jeśli procent nie jest używany" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Stała kwota rabatu" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Rabat procentowy" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Końcowy czas ważności" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Czas rozpoczęcia ważności" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Znacznik czasu użycia kodu promocyjnego, pusty, jeśli nie został jeszcze " +"użyty." + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Znacznik czasu użycia" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Przypisany użytkownik" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Kod promocyjny" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Kody promocyjne" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " +"nie oba lub żaden z nich." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Kod promocyjny został już wykorzystany" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Reprezentuje zamówienie złożone przez użytkownika. Ta klasa modeluje " +"zamówienie w aplikacji, w tym jego różne atrybuty, takie jak informacje " +"rozliczeniowe i wysyłkowe, status, powiązany użytkownik, powiadomienia i " +"powiązane operacje. Zamówienia mogą mieć powiązane produkty, można stosować " +"promocje, ustawiać adresy i aktualizować szczegóły wysyłki lub rozliczeń. " +"Funkcjonalność wspiera również zarządzanie produktami w cyklu życia " +"zamówienia." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Adres rozliczeniowy użyty dla tego zamówienia" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Zastosowany kod promocyjny" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Adres wysyłki użyty dla tego zamówienia" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Adres wysyłki" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Aktualny status zamówienia w jego cyklu życia" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Status zamówienia" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Struktura JSON powiadomień do wyświetlenia użytkownikom, w interfejsie " +"administratora używany jest widok tabeli" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Użytkownik, który złożył zamówienie" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Użytkownik" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Kup czas" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Czytelny dla człowieka identyfikator zamówienia" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "Identyfikator czytelny dla człowieka" + +#: engine/core/models.py:1277 +msgid "order" +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!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"Nie można dodać produktów do zamówienia, które nie jest zamówieniem " +"oczekującym." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Nie można dodać nieaktywnych produktów do zamówienia" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Nie można dodać więcej produktów niż jest dostępnych w magazynie" + +#: 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 "" +"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " +"oczekującym." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} nie istnieje z zapytaniem <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Kod promocyjny nie istnieje" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "Możesz kupować tylko produkty fizyczne z podanym adresem wysyłki!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adres nie istnieje" + +#: 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 "" +"W tej chwili nie możesz dokonać zakupu, spróbuj ponownie za kilka minut." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Nieprawidłowa wartość siły" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Nie można kupić pustego zamówienia!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" +"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " +"oczekującym." + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Użytkownik bez salda nie może kupować za saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Niewystarczające środki do zrealizowania zamówienia" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"Nie można dokonać zakupu bez rejestracji, należy podać następujące " +"informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " +"klienta." + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Nieprawidłowa metoda płatności: {payment_method} z " +"{available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Zarządza opiniami użytkowników na temat produktów. Ta klasa jest " +"przeznaczona do przechwytywania i przechowywania opinii użytkowników na " +"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." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Komentarze użytkowników na temat ich doświadczeń z produktem" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "Komentarze zwrotne" + +#: engine/core/models.py:1719 +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." + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Powiązany produkt zamówienia" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Ocena produktu przypisana przez użytkownika" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Ocena produktu" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +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ę " +"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." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Cena zapłacona przez klienta za ten produkt w momencie zakupu." + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +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" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Uwagi wewnętrzne" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Powiadomienia użytkownika" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Reprezentacja JSON atrybutów tego elementu" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Zamówione atrybuty produktu" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Zamówienie nadrzędne" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Konkretny produkt powiązany z tą linią zamówienia" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Ilość tego konkretnego produktu w zamówieniu" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Ilość produktu" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Aktualny status tego produktu w zamówieniu" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status linii produktów" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct musi mieć powiązane zamówienie!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" +"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " +"oczekującym." + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Nazwa" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "Adres URL integracji" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Dane uwierzytelniające" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Można mieć tylko jednego domyślnego dostawcę CRM" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Łącze CRM zamówienia" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Łącza CRM zamówień" + +#: engine/core/models.py:1947 +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." +msgstr "" +"Reprezentuje funkcjonalność pobierania zasobów cyfrowych powiązanych z " +"zamówieniami. Klasa DigitalAssetDownload zapewnia możliwość zarządzania i " +"uzyskiwania dostępu do plików do pobrania powiązanych z produktami " +"zamówienia. Przechowuje informacje o powiązanym produkcie zamówienia, " +"liczbie pobrań i tym, czy zasób jest publicznie widoczny. Zawiera metodę " +"generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma " +"status ukończonego." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Pobierz" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Pliki do pobrania" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"Aby dodać opinię, należy podać komentarz, ocenę i identyfikator produktu " +"zamówienia." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Strona główna" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Kontakt" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "O nas" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Mix klientów (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nowi klienci" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Powracający klienci" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Brak aktywności klienta w ciągu ostatnich 30 dni." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Dzienna sprzedaż" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Zamówienia (ZAKOŃCZONE)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Przychód brutto" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Zamówienia" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Pulpit nawigacyjny" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Przegląd dochodów" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Przychody netto" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Podatki" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Zwroty" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Przychód brutto" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Brak daty" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Przychody netto" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Stopa zwrotu" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Zwrócony" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Niskie stany magazynowe" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Brak pozycji o niskim stanie magazynowym." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Najczęściej zwracane produkty (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Brak zwrotów w ciągu ostatnich 30 dni." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Najbardziej pożądany produkt" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Brak danych." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Najpopularniejszy produkt" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Szybkie łącza" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Brak dostępnych linków." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Wysyłane vs cyfrowe (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Cyfrowy" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Wysłane" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Najlepsze kategorie według ilości (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Brak sprzedaży kategorii w ciągu ostatnich 30 dni." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrator strony Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Potwierdzenie zamówienia" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Witaj %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Dziękujemy za zamówienie #%(order.pk)s! Z przyjemnością informujemy, że " +"przyjęliśmy Twoje zamówienie do realizacji. Poniżej znajdują się szczegóły " +"zamówienia:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Łącznie" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Cena całkowita" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy " +"technicznej pod adresem %(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Najlepsze pozdrowienia,
zespół %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Wszelkie prawa zastrzeżone" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Zamówienie dostarczone" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Witaj %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +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:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"dodatkowe\n" +" informacje" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Wartość" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +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 %(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Klucz" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Dodaj wiersz" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Przyznany kod promocyjny" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Dziękujemy za pozostanie z nami! Otrzymałeś od nas kod promocyjny\n" +" na" + +#: 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" +" the details of your order:" +msgstr "" +"Dziękujemy za zamówienie! Z przyjemnością potwierdzamy zakup. Poniżej " +"znajdują się szczegóły zamówienia:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Cena wysyłki" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Zamówienie zostanie dostarczone pod następujący adres:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Z wyrazami szacunku,
Zespół %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"wszelkie prawa\n" +" zastrzeżone" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Wymagane są zarówno dane, jak i limit czasu" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" +"Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do " +"216000 sekund." + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | zainicjowany kontakt" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | potwierdzenie zamówienia" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | zamówienie dostarczone" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Nie masz uprawnień do wykonania tej akcji." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Parametr NOMINATIM_URL musi być skonfigurowany!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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:106 +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 "" +"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." + +#: engine/core/views.py:141 +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:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Zwraca parametry strony internetowej jako obiekt JSON." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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:219 +msgid "Handles `contact us` form submissions." +msgstr "Obsługuje zgłoszenia formularzy `kontaktuj się z nami`." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Obsługuje żądania przetwarzania i sprawdzania poprawności adresów URL z " +"przychodzących żądań POST." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Obsługuje globalne zapytania wyszukiwania." + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." + +#: engine/core/views.py:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "Order_product_uuid jest wymagany" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "zamówiony produkt nie istnieje" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Zasób cyfrowy można pobrać tylko raz" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Produkt zamówienia nie ma produktu" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "nie znaleziono favicon" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Przekierowuje żądanie na stronę indeksu administratora. Funkcja obsługuje " +"przychodzące żądania HTTP i przekierowuje je na stronę indeksu interfejsu " +"administratora Django. Używa funkcji `redirect` Django do obsługi " +"przekierowania HTTP." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Zwraca aktualną wersję aplikacji eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Przychody i zamówienia (ostatnie %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definiuje zestaw widoków do zarządzania operacjami związanymi z Evibes. " +"Klasa EvibesViewSet dziedziczy z ModelViewSet i zapewnia funkcjonalność do " +"obsługi akcji i operacji na encjach Evibes. Obejmuje ona obsługę " +"dynamicznych klas serializatora w oparciu o bieżącą akcję, konfigurowalne " +"uprawnienia i formaty renderowania." + +#: 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." +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." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Obsługuje operacje związane z obiektami Attribute w aplikacji. Zapewnia " +"zestaw punktów końcowych API do interakcji z danymi atrybutów. Ta klasa " +"zarządza zapytaniami, filtrowaniem i serializacją obiektów Attribute, " +"umożliwiając dynamiczną kontrolę nad zwracanymi danymi, takimi jak " +"filtrowanie według określonych pól lub pobieranie szczegółowych lub " +"uproszczonych informacji w zależności od żądania." + +#: 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." +msgstr "" +"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." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"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 " +"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: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 "" +"Reprezentuje zestaw widoków do zarządzania instancjami Brand. Ta klasa " +"zapewnia funkcjonalność dla zapytań, filtrowania i serializacji obiektów " +"Brand. Używa frameworka ViewSet Django, aby uprościć implementację punktów " +"końcowych API dla obiektów Brand." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Zarządza operacjami związanymi z modelem `Product` w systemie. Ta klasa " +"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 " +"powiązanych informacji zwrotnych o produkcie." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +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 " +"dostępu do zasobów związanych z Vendorem poprzez framework Django REST." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"Reprezentacja zestawu widoków obsługujących obiekty opinii. Ta klasa " +"zarządza operacjami związanymi z obiektami opinii, w tym listowaniem, " +"filtrowaniem i pobieraniem szczegółów. Celem tego zestawu widoków jest " +"zapewnienie różnych serializatorów dla różnych akcji i zaimplementowanie " +"opartej na uprawnieniach obsługi dostępnych obiektów opinii. Rozszerza " +"bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do " +"odpytywania danych." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet do zarządzania zamówieniami i powiązanymi operacjami. Klasa ta " +"zapewnia funkcjonalność pobierania, modyfikowania i zarządzania obiektami " +"zamówień. Zawiera różne punkty końcowe do obsługi operacji zamówień, takich " +"jak dodawanie lub usuwanie produktów, dokonywanie zakupów dla " +"zarejestrowanych i niezarejestrowanych użytkowników oraz pobieranie " +"oczekujących zamówień bieżącego uwierzytelnionego użytkownika. ViewSet " +"wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " +"odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"Udostępnia zestaw widoków do zarządzania jednostkami OrderProduct. Ten " +"zestaw widoków umożliwia operacje CRUD i niestandardowe akcje specyficzne " +"dla modelu OrderProduct. Obejmuje filtrowanie, sprawdzanie uprawnień i " +"przełączanie serializera w oparciu o żądaną akcję. Dodatkowo zapewnia " +"szczegółową akcję do obsługi informacji zwrotnych na temat instancji " +"OrderProduct" + +#: 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: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:914 +msgid "Represents a view set for managing promotions. " +msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." + +#: 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: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 " +"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 do zarządzania operacjami Wishlist. WishlistViewSet zapewnia punkty " +"końcowe do interakcji z listą życzeń użytkownika, umożliwiając pobieranie, " +"modyfikowanie i dostosowywanie produktów na liście życzeń. Ten ViewSet " +"ułatwia takie funkcje, jak dodawanie, usuwanie i akcje zbiorcze dla " +"produktów z listy życzeń. Kontrole uprawnień są zintegrowane, aby zapewnić, " +"że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " +"zostaną przyznane wyraźne uprawnienia." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Błąd geokodowania: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Obsługuje operacje związane ze znacznikami produktów w aplikacji. Klasa ta " +"zapewnia funkcjonalność pobierania, filtrowania i serializowania obiektów " +"Product Tag. Obsługuje elastyczne filtrowanie określonych atrybutów przy " +"użyciu określonego zaplecza filtra i dynamicznie wykorzystuje różne " +"serializatory w zależności od wykonywanej akcji." diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.mo b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..fda5dcb8 Binary files /dev/null and b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.po b/engine/core/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 00000000..08b26655 --- /dev/null +++ b/engine/core/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,3493 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: pt-br\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "ID exclusivo" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"O ID exclusivo é usado para identificar com segurança qualquer objeto do " +"banco de dados" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Está ativo" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Criado" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Quando o objeto apareceu pela primeira vez no banco de dados" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modificado" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Quando o objeto foi editado pela última vez" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Traduções" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Geral" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relações" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "informações adicionais" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadados" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Carimbos de data/hora" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Os itens selecionados foram ativados!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Os itens selecionados foram desativados!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Valores de atributos" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Imagem" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Imagens" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Estoque" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Ações" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Pedido de produto" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Crianças" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Configuração" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Core" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Finalizado" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Entregando" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Entregue" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Cancelado" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Falha" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Pendente" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Aceito" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Dinheiro devolvido" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Pagamento" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Bem-sucedido" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Esquema OpenAPI no formato selecionado com o idioma selecionado" + +#: engine/core/docs/drf/views.py:33 +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 "" +"Esquema OpenApi3 para essa API. O formato pode ser selecionado por meio de " +"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:37 +msgid "cache I/O" +msgstr "E/S do cache" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Obter uma lista de idiomas suportados" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Obter os parâmetros expostos do aplicativo" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Solicite um URL com CORS. Somente https é permitido." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Pesquisa entre produtos, categorias e marcas" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Ponto de extremidade de pesquisa global para consultar as tabelas do projeto" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Comprar um pedido como uma empresa" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Compre um pedido como uma empresa, usando os `products` fornecidos com " +"`product_uuid` e `attributes`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "baixar um ativo digital de um pedido digital adquirido" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Listar todos os grupos de atributos (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Recuperar um único grupo de atributos (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Criar um grupo de atributos" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Excluir um grupo de atributos" + +#: engine/core/docs/drf/viewsets.py:89 +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" +msgstr "" +"Reescreva alguns campos de um grupo de atributos existente salvando os não " +"editáveis" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Listar todos os atributos (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Recuperar um único atributo (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Criar um atributo" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Excluir um atributo" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Reescreva um atributo existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Reescreva alguns campos de um atributo existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Listar todos os valores de atributos (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Recuperar um único valor de atributo (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Criar um valor de atributo" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Excluir um valor de atributo" + +#: engine/core/docs/drf/viewsets.py:179 +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" +msgstr "" +"Reescreva alguns campos de um valor de atributo existente salvando os não " +"editáveis" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Listar todas as categorias (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Recuperar uma única categoria (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "UUID ou slug da categoria" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Criar uma categoria" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Excluir uma categoria" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Reescrever uma categoria existente salvando itens não editáveis" + +#: 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 "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "Meta snapshot de SEO" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Retorna um instantâneo dos metadados de SEO da categoria" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Listar todas as categorias (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Para usuários não funcionários, apenas seus próprios pedidos são devolvidos." + +#: 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" +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" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Filtrar pedidos com buy_time >= este datetime ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrar pedidos com buy_time <= este datetime ISO 8601" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrar por UUID de ordem exata" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtrar por ID exata do pedido legível por humanos" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filtrar por e-mail do usuário (correspondência exata sem distinção entre " +"maiúsculas e minúsculas)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrar por UUID do usuário" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filtrar por status do pedido (correspondência de substring sem distinção " +"entre maiúsculas e minúsculas)" + +#: 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')." +msgstr "" +"Ordene por uma das seguintes opções: uuid, human_readable_id, user_email, " +"user, status, created, modified, buy_time, random. Prefixe com '-' para " +"ordem decrescente (por exemplo, '-buy_time')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Recuperar uma única categoria (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "UUID do pedido ou ID legível por humanos" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Criar um atributo" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Não funciona para usuários que não são da equipe." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Excluir um atributo" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Reescrever uma categoria existente salvando itens não editáveis" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Preço de compra no momento do pedido" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Finaliza a compra do pedido. Se `force_balance` for usado, a compra será " +"concluída usando o saldo do usuário; se `force_payment` for usado, uma " +"transação será iniciada." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "recuperar o pedido pendente atual de um usuário" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "comprar um pedido sem criar uma conta" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finaliza a compra do pedido para um usuário não registrado." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Adicionar um produto ao pedido" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adiciona um produto a um pedido usando o `product_uuid` e os `attributes` " +"fornecidos." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" +"Adicionar uma lista de produtos ao pedido, as quantidades não serão " +"contabilizadas" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adiciona uma lista de produtos a um pedido usando o `product_uuid` e os " +"`attributes` fornecidos." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Remover um produto do pedido" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Remove um produto de um pedido usando o `product_uuid` e os `attributes` " +"fornecidos." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Remover um produto do pedido, as quantidades não serão contabilizadas" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Remove uma lista de produtos de um pedido usando o `product_uuid` e os " +"`attributes` fornecidos." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Listar todos os atributos (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Para usuários que não pertencem à equipe, apenas suas próprias listas de " +"desejos são retornadas." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Recuperar um único atributo (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Criar um atributo" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Não funciona para usuários que não são da equipe." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Excluir um atributo" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Reescreva um atributo existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Reescreva alguns campos de um atributo existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +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" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Adicionar um produto ao pedido" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Adiciona um produto a uma lista de desejos usando o `product_uuid` fornecido" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Remover um produto da lista de desejos" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Remove um produto de uma lista de desejos usando o `product_uuid` fornecido" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Adicionar muitos produtos à lista de desejos" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Adiciona vários produtos a uma lista de desejos usando os `product_uuids` " +"fornecidos" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Remover um produto do pedido" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Remove vários produtos de uma lista de desejos usando os `product_uuids` " +"fornecidos" + +#: 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" +"• **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" +"`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" +"Exemplos: \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 +msgid "list all products (simple view)" +msgstr "Listar todos os produtos (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Recuperar um único produto (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Reescrever um produto existente, preservando os campos não editáveis" + +#: 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 "" +"Atualizar alguns campos de um produto existente, preservando os campos não " +"editáveis" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Excluir um produto" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "lista todos os feedbacks permitidos para um produto" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Retorna um instantâneo dos metadados de SEO do produto" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Listar todos os endereços" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Recuperar um único endereço" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Criar um novo endereço" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Excluir um endereço" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Atualizar um endereço inteiro" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Atualizar parcialmente um endereço" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Entrada de endereço com preenchimento automático" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Cadeia de consulta de dados brutos, anexe os dados do ponto de extremidade " +"de IP geográfico" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "limita a quantidade de resultados, 1 < limite < 10, padrão: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "listar todos os feedbacks (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "recuperar um único feedback (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "criar um feedback" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "excluir um feedback" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "reescrever um feedback existente salvando itens não editáveis" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "listar todas as relações pedido-produto (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "recuperar uma única relação pedido-produto (visão detalhada)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "criar uma nova relação pedido-produto" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "substituir uma relação pedido-produto existente" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "atualizar parcialmente uma relação pedido-produto existente" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "excluir uma relação pedido-produto" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "adicionar ou remover feedback em uma relação pedido-produto" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Listar todas as marcas (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Recuperar uma única marca (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID ou slug da marca" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Criar uma marca" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Delete a brand" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Reescrever uma marca existente economizando produtos não editáveis" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Listar todos os fornecedores (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Recuperar um único fornecedor (visão detalhada)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Criar um fornecedor" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Excluir um fornecedor" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Reescrever um fornecedor existente salvando itens não editáveis" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Listar todas as imagens do produto (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Recuperar uma única imagem de produto (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Criar uma imagem do produto" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Excluir uma imagem de produto" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Reescrever uma imagem de produto existente salvando itens não editáveis" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Listar todos os códigos promocionais (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Recuperar um único código promocional (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Criar um código promocional" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +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" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Listar todas as promoções (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Recuperar uma única promoção (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Criar uma promoção" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Excluir uma promoção" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Reescrever uma promoção existente salvando itens não editáveis" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Listar todas as ações (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Recuperar um único estoque (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Criar um registro de estoque" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Excluir um registro de estoque" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Reescrever um registro de estoque existente, salvando itens não editáveis" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Listar todas as tags de produtos (visualização simples)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Recuperar uma única tag de produto (visualização detalhada)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Criar uma tag de produto" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Excluir uma tag de produto" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Reescrever uma tag de produto existente salvando itens não editáveis" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Reescreva alguns campos de uma categoria existente salvando os não editáveis" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Nenhum termo de pesquisa foi fornecido." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Pesquisa" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Nome" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Categorias" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Categorias Lesmas" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Tags" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Preço mínimo" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Preço máximo" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Está ativo" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Brand" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Atributos" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Quantidade" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Lesma" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "É digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Incluir subcategorias" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Incluir produtos pessoais encomendados" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Deve haver um category_uuid para usar o sinalizador include_subcategories" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Pesquisa (ID, nome do produto ou número de peça)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Comprado depois (inclusive)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Comprado antes (inclusive)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "E-mail do usuário" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID do usuário" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "ID legível por humanos" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Parent" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Toda a categoria (com pelo menos 1 produto ou não)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Nível" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID do produto" + +#: 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:41 +msgid "data to store in cache" +msgstr "Dados a serem armazenados no cache" + +#: 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:47 +msgid "cached data" +msgstr "Dados em cache" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Adicionar um produto ao pedido" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Remover todos os produtos do pedido" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Comprar um pedido" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Remover/Adicionar" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Forneça o valor `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Adicionar um produto ao pedido" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "Remover um produto do pedido" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "Remover um produto do pedido" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "Remover um produto do pedido" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "Comprar um pedido" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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: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:573 +msgid "action must be either `add` or `remove`" +msgstr "A ação deve ser `add` ou `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Cadeia de endereços original fornecida pelo usuário" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} não existe: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - funciona muito bem" + +#: 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:95 +msgid "grouped attributes" +msgstr "Atributos agrupados" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Grupos de atributos" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Marcas" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Categorias" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Tags para esta categoria" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produtos desta categoria" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Vendors" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitude (coordenada Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitude (coordenada X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Como fazer" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Representa o feedback de um usuário." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Feedback" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Endereço de cobrança" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Preço total deste pedido" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Todos os produtos estão no pedido digital?" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Transações para esta ordem" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Pedidos" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL da imagem" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Imagens do produto" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Feedbacks" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Grupos de atributos" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Preço" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Quantidade" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Número de feedbacks" + +#: 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:484 +msgid "discount price" +msgstr "Preço com desconto" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produtos" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Códigos promocionais" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produtos à venda" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promoções" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Vendor" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produto" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Listas de desejos" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Produtos marcados" + +#: 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:665 +msgid "tagged categories" +msgstr "Categorias de tags" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Tags das categorias" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Nome do projeto" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Nome da empresa" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Endereço da empresa" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Número de telefone da empresa" + +#: 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:681 +msgid "email host user" +msgstr "Usuário do host de e-mail" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Valor máximo para pagamento" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Valor mínimo para pagamento" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Dados analíticos" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Dados do anúncio" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configuração" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Código do idioma" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Nome do idioma" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Sinalizador de idioma, se houver :)" + +#: 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 +msgid "products search results" +msgstr "Resultados da pesquisa de produtos" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Resultados da pesquisa de produtos" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Representa um grupo de atributos, que pode ser hierárquico. Essa classe é " +"usada para gerenciar e organizar grupos de atributos. Um grupo de atributos " +"pode ter um grupo pai, formando uma estrutura hierárquica. Isso pode ser " +"útil para categorizar e gerenciar atributos de forma mais eficaz em um " +"sistema complexo." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Pai deste grupo" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Grupo de atributos pai" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Nome do grupo de atributos" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Grupo de atributos" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Representa uma entidade de fornecedor capaz de armazenar informações sobre " +"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 " +"fornecedores terceirizados." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Armazena as credenciais e os pontos de extremidade necessários para a " +"comunicação da API do fornecedor" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Informações de autenticação" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Definir a marcação para produtos recuperados desse fornecedor" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Porcentagem da margem de lucro do fornecedor" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Nome do fornecedor" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Nome do fornecedor" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "arquivo de resposta" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "última resposta de processamento do fornecedor" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Caminho do arquivo de integração do fornecedor" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Caminho de integração" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Representa uma tag de produto usada para classificar ou identificar " +"produtos. A classe ProductTag foi projetada para identificar e classificar " +"produtos de forma exclusiva por meio de uma combinação de um identificador " +"de tag interno e um nome de exibição fácil de usar. Ela oferece suporte a " +"operações exportadas por meio de mixins e fornece personalização de " +"metadados para fins administrativos." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Identificador de tag interno para a tag do produto" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Nome da etiqueta" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Nome de fácil utilização para a etiqueta do produto" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Nome de exibição da tag" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Etiqueta do produto" + +#: engine/core/models.py:229 +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 "" +"Representa uma tag de categoria usada para produtos. Essa classe modela uma " +"tag de categoria que pode ser usada para associar e classificar produtos. " +"Ela inclui atributos para um identificador de tag interno e um nome de " +"exibição de fácil utilização." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "tag de categoria" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "tags de categoria" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Representa uma entidade de categoria para organizar e agrupar itens " +"relacionados em uma estrutura hierárquica. As categorias podem ter " +"relacionamentos hierárquicos com outras categorias, oferecendo suporte a " +"relacionamentos pai-filho. A classe inclui campos para metadados e " +"representação visual, que servem como base para recursos relacionados a " +"categorias. Normalmente, essa classe é usada para definir e gerenciar " +"categorias de produtos ou outros agrupamentos semelhantes em um aplicativo, " +"permitindo que os usuários ou administradores especifiquem o nome, a " +"descrição e a hierarquia das categorias, bem como atribuam atributos como " +"imagens, tags ou prioridade." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Faça upload de uma imagem que represente essa categoria" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Imagem da categoria" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Definir uma porcentagem de majoração para os produtos dessa categoria" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Pai dessa categoria para formar uma estrutura hierárquica" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Categoria dos pais" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Nome da categoria" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Forneça um nome para essa categoria" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Adicione uma descrição detalhada para essa categoria" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Descrição da categoria" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "tags que ajudam a descrever ou agrupar essa categoria" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Prioridade" + +#: engine/core/models.py:438 +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." +msgstr "" +"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." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Nome da marca" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Nome da marca" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Faça upload de um logotipo que represente essa marca" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Imagem pequena da marca" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Faça upload de um logotipo grande que represente essa marca" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Imagem de marca grande" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Adicione uma descrição detalhada da marca" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Descrição da marca" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Categorias opcionais às quais essa marca está associada" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Representa o estoque de um produto gerenciado no sistema. Essa classe " +"fornece detalhes sobre a relação entre fornecedores, produtos e suas " +"informações de estoque, bem como propriedades relacionadas ao estoque, como " +"preço, preço de compra, quantidade, SKU e ativos digitais. Ela faz parte do " +"sistema de gerenciamento de estoque para permitir o rastreamento e a " +"avaliação dos produtos disponíveis de vários fornecedores." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "O fornecedor que fornece esse estoque de produtos" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Fornecedor associado" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Preço final para o cliente após as marcações" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Preço de venda" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "O produto associado a essa entrada em estoque" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Produto associado" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "O preço pago ao fornecedor por esse produto" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Preço de compra do fornecedor" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Quantidade disponível do produto em estoque" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Quantidade em estoque" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU atribuído pelo fornecedor para identificar o produto" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "SKU do fornecedor" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Arquivo digital associado a esse estoque, se aplicável" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Arquivo digital" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Atributos do sistema" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Entradas de estoque" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Representa um produto com atributos como categoria, marca, tags, status " +"digital, nome, descrição, número de peça e slug. Fornece propriedades " +"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 " +"frequência para melhorar o desempenho. É usada para definir e manipular " +"dados de produtos e suas informações associadas em um aplicativo." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Categoria à qual este produto pertence" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Opcionalmente, associe esse produto a uma marca" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Tags que ajudam a descrever ou agrupar este produto" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Indica se esse produto é entregue digitalmente" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "O produto é digital" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Fornecer um nome de identificação claro para o produto" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Nome do produto" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Adicione uma descrição detalhada do produto" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Descrição do produto" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Número de peça para este produto" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Número da peça" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Unidade de Manutenção de Estoque para este produto" + +#: engine/core/models.py:720 +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 " +"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 " +"valores, incluindo string, inteiro, float, booleano, matriz e objeto. Isso " +"permite a estruturação dinâmica e flexível dos dados." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Grupo desse atributo" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Cordas" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Inteiro" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Flutuação" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Booleano" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Matriz" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objeto" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Tipo do valor do atributo" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Tipo de valor" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Nome desse atributo" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Nome do atributo" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "é filtrável" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Quais atributos e valores podem ser usados para filtrar essa categoria." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Atributo desse valor" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "O produto específico associado ao valor desse atributo" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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." + +#: 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" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Texto alternativo da imagem" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Faça o upload do arquivo de imagem para este produto" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Imagem do produto" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Determina a ordem em que as imagens são exibidas" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Prioridade de exibição" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "O produto que esta imagem representa" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Imagens do produto" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"Representa uma campanha promocional para produtos com desconto. Essa classe " +"é usada para definir e gerenciar campanhas promocionais que oferecem um " +"desconto baseado em porcentagem para produtos. A classe inclui atributos " +"para definir a taxa de desconto, fornecer detalhes sobre a promoção e " +"vinculá-la aos produtos aplicáveis. Ela se integra ao catálogo de produtos " +"para determinar os itens afetados na campanha." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Desconto percentual para os produtos selecionados" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Porcentagem de desconto" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Forneça um nome exclusivo para essa promoção" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Nome da promoção" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Descrição da promoção" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Selecione quais produtos estão incluídos nessa promoção" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Produtos incluídos" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promoção" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"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 " +"uma só vez." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produtos que o usuário marcou como desejados" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Usuário que possui esta lista de desejos" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Proprietário da lista de desejos" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Lista de desejos" + +#: engine/core/models.py:985 +msgid "" +"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." +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." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documentário" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentários" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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 " +"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 " +"dos dados." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Linha de endereço do cliente" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Linha de endereço" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Rua" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Distrito" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Cidade" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Região" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Código postal" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "País" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Ponto de geolocalização (Longitude, Latitude)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Resposta JSON completa do geocodificador para este endereço" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Resposta JSON armazenada do serviço de geocodificação" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Endereço" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Endereços" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Representa um código promocional que pode ser usado para descontos, " +"gerenciando sua validade, tipo de desconto e aplicação. A classe PromoCode " +"armazena detalhes sobre um código promocional, incluindo seu identificador " +"exclusivo, propriedades de desconto (valor ou porcentagem), período de " +"validade, usuário associado (se houver) e status de seu uso. Ela inclui a " +"funcionalidade para validar e aplicar o código promocional a um pedido, " +"garantindo que as restrições sejam atendidas." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Código exclusivo usado por um usuário para resgatar um desconto" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Identificador de código promocional" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Valor de desconto fixo aplicado se a porcentagem não for usada" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Valor do desconto fixo" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Desconto percentual aplicado se o valor fixo não for usado" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Desconto percentual" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Registro de data e hora em que o código promocional expira" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Tempo de validade final" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "" +"Registro de data e hora a partir do qual esse código promocional é válido" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Hora de início da validade" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Registro de data e hora em que o código promocional foi usado, em branco se " +"ainda não tiver sido usado" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Registro de data e hora de uso" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Usuário atribuído a esse código promocional, se aplicável" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Usuário atribuído" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Código promocional" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Códigos promocionais" + +#: engine/core/models.py:1150 +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." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "O código promocional já foi usado" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Tipo de desconto inválido para o código promocional {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Representa um pedido feito por um usuário. Essa classe modela um pedido " +"dentro do aplicativo, incluindo seus vários atributos, como informações de " +"faturamento e envio, status, usuário associado, notificações e operações " +"relacionadas. Os pedidos podem ter produtos associados, promoções podem ser " +"aplicadas, endereços definidos e detalhes de envio ou faturamento " +"atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos " +"produtos no ciclo de vida do pedido." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "O endereço de cobrança usado para esse pedido" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Código promocional opcional aplicado a este pedido" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Código promocional aplicado" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "O endereço de entrega usado para esse pedido" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Endereço de entrega" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Status atual do pedido em seu ciclo de vida" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Status do pedido" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Estrutura JSON de notificações a serem exibidas aos usuários; na interface " +"do usuário do administrador, é usada a visualização de tabela" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Representação JSON dos atributos do pedido para esse pedido" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "O usuário que fez o pedido" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Usuário" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "O registro de data e hora em que o pedido foi finalizado" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Tempo de compra" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Um identificador legível por humanos para o pedido" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "ID legível por humanos" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Pedido" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Um usuário deve ter apenas uma ordem pendente por vez!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "Não é possível adicionar produtos a um pedido que não esteja pendente" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Não é possível adicionar produtos inativos ao pedido" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "" +"Não é possível adicionar mais produtos do que os disponíveis em estoque" + +#: 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 "Não é possível remover produtos de um pedido que não esteja pendente" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} não existe com a consulta <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +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!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "O endereço não existe" + +#: 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 "" +"Não é possível comprar neste momento, tente novamente em alguns minutos." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Valor de força inválido" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Você não pode comprar um pedido vazio!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Não é possível comprar um pedido sem um usuário!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Um usuário sem saldo não pode comprar com saldo!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Fundos insuficientes para concluir o pedido" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"Não é possível comprar sem registro, forneça as seguintes informações: nome " +"do cliente, e-mail do cliente, número de telefone do cliente" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Método de pagamento inválido: {payment_method} de " +"{available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"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 " +"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." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "" +"Comentários fornecidos pelo usuário sobre sua experiência com o produto" + +#: engine/core/models.py:1712 +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" +msgstr "" +"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" +msgstr "Produto de pedido relacionado" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Classificação atribuída pelo usuário ao produto" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Avaliação do produto" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +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 " +"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 " +"para produtos digitais. O modelo se integra aos modelos Order e Product e " +"armazena uma referência a eles." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "O preço pago pelo cliente por esse produto no momento da compra" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Preço de compra no momento do pedido" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" +"Comentários internos para administradores sobre este produto encomendado" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Comentários internos" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Notificações do usuário" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Representação JSON dos atributos desse item" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Atributos ordenados do produto" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Referência ao pedido pai que contém esse produto" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Ordem dos pais" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "O produto específico associado a essa linha de pedido" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Quantidade desse produto específico no pedido" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Quantidade do produto" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Status atual desse produto no pedido" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status da linha de produtos" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "O Orderproduct deve ter um pedido associado!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Ação incorreta especificada para o feedback: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "você não pode dar feedback a um pedido que não foi recebido" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Nome" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL da integração" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Credenciais de autenticação" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Você só pode ter um provedor de CRM padrão" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRMs" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Link do CRM do pedido" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Links de CRM dos pedidos" + +#: engine/core/models.py:1947 +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." +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." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Baixar" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Downloads" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"Você deve fornecer um comentário, uma classificação e o uuid do produto do " +"pedido para adicionar feedback." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Início" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Entre em contato conosco" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Sobre nós" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Mix de clientes (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Novos clientes" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Clientes que retornam" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Nenhuma atividade de cliente nos últimos 30 dias." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Vendas diárias" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Pedidos (FINALIZADOS)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Receita bruta" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Pedidos" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Painel de controle" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Visão geral da renda" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Receita líquida" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Impostos" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Devoluções" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Receita bruta" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "No data" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Receita líquida" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Taxa de reembolso" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Devolvido" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Estoque baixo" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Não há itens com estoque baixo." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Produtos mais devolvidos (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Não houve devoluções nos últimos 30 dias." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Produto mais desejado" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Ainda não há dados." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Produto mais popular" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Links rápidos" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Não há links disponíveis." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Enviado x Digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Enviado" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Principais categorias por quantidade (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Nenhuma venda de categoria nos últimos 30 dias." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administrador do site Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Confirmação de pedido" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logotipo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Olá %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Obrigado por seu pedido #%(order.pk)s! Temos o prazer de informá-lo de que " +"seu pedido foi colocado em prática. Abaixo estão os detalhes de seu pedido:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Total" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Preço total" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Se tiver alguma dúvida, entre em contato com nosso suporte em " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Atenciosamente,
a equipe %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Todos os direitos reservados" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Pedido entregue" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Olá %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Seu pedido №%(order_uuid)s foi processado com sucesso! Abaixo estão os " +"detalhes de seu pedido:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"adicionais\n" +" informações adicionais" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Valor" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Se tiver alguma dúvida, entre em contato com nosso suporte em " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Atenciosamente,
a equipe %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Chave" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Adicionar linha" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Código promocional concedido" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Obrigado por ficar conosco! Nós lhe concedemos um código promocional\n" +" para" + +#: 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" +" the details of your order:" +msgstr "" +"Obrigado por seu pedido! Temos o prazer de confirmar sua compra. Abaixo " +"estão os detalhes de seu pedido:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Preço da remessa" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Seu pedido será entregue no seguinte endereço:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Com os melhores cumprimentos,
A equipe %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"todos os direitos\n" +" reservados" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "São necessários dados e tempo limite" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +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 "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmação do pedido" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | pedido entregue" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Você não tem permissão para executar essa ação." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "O parâmetro NOMINATIM_URL deve ser configurado!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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." + +#: engine/core/views.py:106 +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 "" +"Lida com a resposta de exibição detalhada de um mapa do site. Essa função " +"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:141 +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:173 +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:192 +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." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Trata os envios de formulários \"entre em contato conosco\"." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Trata as solicitações de processamento e validação de URLs de solicitações " +"POST recebidas." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Trata as consultas de pesquisa global." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid é obrigatório" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "o produto do pedido não existe" + +#: engine/core/views.py:353 +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:356 +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:362 +msgid "the order product does not have a product" +msgstr "O produto do pedido não tem um produto" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon não encontrado" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"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." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Retorna a versão atual do eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Receita e pedidos (último %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"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: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." +msgstr "" +"Representa um conjunto de visualizações para gerenciar objetos " +"AttributeGroup. Trata das operações relacionadas ao AttributeGroup, " +"incluindo filtragem, serialização e recuperação de dados. Essa classe faz " +"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:175 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +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 " +"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 " +"detalhadas ou simplificadas, dependendo da solicitação." + +#: 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." +msgstr "" +"Um conjunto de exibições para gerenciar objetos AttributeValue. Esse " +"conjunto de visualizações fornece funcionalidade para listar, recuperar, " +"criar, atualizar e excluir objetos AttributeValue. Ele se integra aos " +"mecanismos do conjunto de visualizações do Django REST Framework e usa " +"serializadores apropriados para diferentes ações. Os recursos de filtragem " +"são fornecidos por meio do DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +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 " +"dados específicos." + +#: 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 " +"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:438 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +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 " +"recuperar detalhes do produto, aplicar permissões e acessar o feedback " +"relacionado de um produto." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Representa um conjunto de visualizações para gerenciar objetos do " +"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." + +#: 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 " +"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 " +"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." + +#: 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 " +"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, " +"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: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 " +"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 " +"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: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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +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:914 +msgid "Represents a view set for managing promotions. " +msgstr "Representa um conjunto de visualizações para gerenciar promoções." + +#: 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: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 " +"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 para gerenciar as operações da lista de desejos. O WishlistViewSet " +"fornece pontos de extremidade para interagir com a lista de desejos de um " +"usuário, permitindo a recuperação, a modificação e a personalização de " +"produtos na lista de desejos. Esse ViewSet facilita a funcionalidade, como " +"adição, remoção e ações em massa para produtos da lista de desejos. As " +"verificações de permissão são integradas para garantir que os usuários só " +"possam gerenciar suas próprias listas de desejos, a menos que sejam " +"concedidas permissões explícitas." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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 " +"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:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Erro de geocodificação: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Trata das operações relacionadas às tags de produtos no aplicativo. Essa " +"classe oferece funcionalidade para recuperar, filtrar e serializar objetos " +"de tag de produto. Ela oferece suporte à filtragem flexível de atributos " +"específicos usando o backend de filtro especificado e usa dinamicamente " +"diferentes serializadores com base na ação que está sendo executada." diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.mo b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo new file mode 100644 index 00000000..eb1526cb Binary files /dev/null and b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.po b/engine/core/locale/ro_RO/LC_MESSAGES/django.po new file mode 100644 index 00000000..00a19414 --- /dev/null +++ b/engine/core/locale/ro_RO/LC_MESSAGES/django.po @@ -0,0 +1,3535 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: ro-ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "ID unic" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"ID-ul unic este utilizat pentru a identifica cu siguranță orice obiect din " +"baza de date" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Este activ" + +#: engine/core/abstract.py:21 +msgid "" +"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ă" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Creat" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Când a apărut pentru prima dată obiectul în baza de date" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modificat" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Când a fost editat obiectul ultima dată" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Traduceri" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Generalități" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relații" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "informații suplimentare" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadate" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Timestamps" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Articolele selectate au fost activate!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Articolele selectate au fost dezactivate!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Valori ale atributului" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Imagine" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Imagini" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stoc" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Stocuri" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Comanda Produs" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Copii" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Configurare" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Nucleu" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Terminat" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Livrarea" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Livrat" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Anulată" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Eșuat" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "În așteptare" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Acceptat" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Bani returnați" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Plata" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "De succes" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Schema OpenAPI în formatul selectat cu limba selectată" + +#: engine/core/docs/drf/views.py:33 +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 "" +"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:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Obțineți o listă a limbilor acceptate" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Obțineți parametrii expunibili ai aplicației" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Solicitați un URL CORSed. Numai https este permis." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +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" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Achiziționați o comandă ca întreprindere" + +#: engine/core/docs/drf/views.py:146 +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." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "descărcarea unui bun digital din comanda digitală achiziționată" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Lista tuturor grupurilor de atribute (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Recuperarea unui singur grup de atribute (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Crearea unui grup de atribute" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +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" + +#: engine/core/docs/drf/viewsets.py:96 +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" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Lista tuturor atributelor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Recuperarea unui singur atribut (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Crearea unui atribut" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Ștergerea unui atribut" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unui atribut existent salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Lista tuturor valorilor atributelor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Recuperarea valorii unui singur atribut (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Crearea unei valori de atribut" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Ștergerea unei valori de atribut" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +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" +msgstr "" +"Rescrierea unor câmpuri ale unei valori de atribut existente salvând " +"elementele needitabile" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Lista tuturor categoriilor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Recuperarea unei singure categorii (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Categorie UUID sau slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Creați o categorie" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Ștergeți o categorie" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Rescrieți o categorie existentă salvând non-editabile" + +#: 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 "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returnează un instantaneu al metadatelor SEO ale categoriei" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Lista tuturor categoriilor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Pentru utilizatorii care nu fac parte din personal, sunt returnate doar " +"comenzile proprii." + +#: 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" +msgstr "" +"Căutare de substring insensibilă la majuscule în 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" +msgstr "Filtrați comenzile cu buy_time >= această dată ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrează comenzile cu buy_time <= această dată ISO 8601" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrare după UUID exact al comenzii" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Filtrați după ID-ul exact al comenzii care poate fi citit de către om" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Filtrare în funcție de adresa de e-mail a utilizatorului (potrivire exactă " +"insensibilă la majuscule)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrare după UUID-ul utilizatorului" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Filtrare în funcție de starea comenzii (potrivire a substringurilor fără " +"deosebire de majuscule)" + +#: 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')." +msgstr "" +"Ordonați după unul dintre: uuid, human_readable_id, user_email, user, " +"status, created, modified, buy_time, random. Prefixați cu \"-\" pentru " +"ordine descrescătoare (de exemplu, \"-buy_time\")." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Recuperarea unei singure categorii (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "UUID al comenzii sau identificator lizibil de către om" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Crearea unui atribut" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Ștergerea unui atribut" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Rescrieți o categorie existentă salvând non-editabile" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Prețul de achiziție la momentul comenzii" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Finalizează comanda de achiziție. Dacă se utilizează `force_balance`, " +"achiziția este finalizată utilizând soldul utilizatorului; Dacă se " +"utilizează `force_payment`, este inițiată o tranzacție." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "preluarea comenzii curente în așteptare a unui utilizator" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "achiziționarea unei comenzi fără crearea unui cont" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "finalizează achiziția comenzii pentru un utilizator neînregistrat." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Adăugați un produs la comandă" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adaugă un produs la o comandă folosind `product_uuid` și `attributes` " +"furnizate." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Adăugați o listă de produse la comandă, cantitățile nu vor conta" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Adaugă o listă de produse la o comandă folosind `product_uuid` și " +"`attributes` furnizate." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Eliminați un produs din comandă" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Elimină un produs dintr-o comandă folosind `product_uuid` și `attributes` " +"furnizate." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "" +"Eliminați un produs din comandă, cantitățile nu vor fi luate în considerare" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Îndepărtează o listă de produse dintr-o comandă folosind `product_uuid` și " +"`attributes` furnizate." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Lista tuturor atributelor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Pentru utilizatorii care nu fac parte din personal, sunt returnate doar " +"propriile liste de dorințe." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Recuperarea unui singur atribut (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Crearea unui atribut" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Ștergerea unui atribut" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unui atribut existent salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "recuperează lista de dorințe în așteptare a unui utilizator" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"recuperează o listă de dorințe în așteptare curentă a unui utilizator " +"autentificat" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Adăugați un produs la comandă" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Adaugă un produs la o listă de dorințe folosind `product_uuid` furnizat" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Eliminați un produs din lista de dorințe" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Înlătură un produs dintr-o listă de dorințe folosind `product_uuid` furnizat" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Adăugați mai multe produse la lista de dorințe" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Adaugă mai multe produse la o listă de dorințe folosind `product_uuids` " +"furnizat" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Eliminați un produs din comandă" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Îndepărtează mai multe produse dintr-o listă de dorințe folosind " +"`product_uuids` furnizat" + +#: 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" +"• **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" +"`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" +"Exemple: \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 +msgid "list all products (simple view)" +msgstr "Listează toate produsele (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" +"**Autorizate:** uuid, rating, nume, slug, creat, modificat, preț, aleatoriu" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Recuperarea unui singur produs (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "" +"Rescrierea unui produs existent, păstrând câmpurile care nu pot fi editate" + +#: 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 "" +"Actualizarea unor câmpuri ale unui produs existent, păstrând câmpurile " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Ștergeți un produs" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "listează toate feedback-urile permise pentru un produs" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Returnează un instantaneu al metadatelor SEO ale produsului" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Enumerați toate adresele" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Recuperarea unei singure adrese" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Creați o adresă nouă" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Ștergeți o adresă" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Actualizarea unei adrese întregi" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Actualizarea parțială a unei adrese" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +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 " +"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" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "limitează cantitatea de rezultate, 1 < limit < 10, implicit: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "lista tuturor feedback-urilor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "recuperați un singur feedback (vizualizare detaliată)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "creați un feedback" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "ștergeți un feedback" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "rescrierea unui feedback existent cu salvarea elementelor needitabile" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "lista tuturor relațiilor comandă-produs (vedere simplă)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "recuperarea unei singure relații comandă-produs (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "crearea unei noi relații comandă-produs" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "să înlocuiască o relație comandă-produs existentă" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "actualizarea parțială a unei relații comandă-produs existente" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "ștergeți o relație comandă-produs" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Lista tuturor mărcilor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Recuperarea unei singure mărci (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Marca UUID sau slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Creați un brand" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +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" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Lista tuturor furnizorilor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Recuperarea unui singur furnizor (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Creați un furnizor" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Ștergeți un furnizor" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Rescrierea unui furnizor existent cu salvarea elementelor needitabile" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Listați toate imaginile produsului (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Preluarea unei singure imagini a produsului (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Creați o imagine a produsului" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +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" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Lista tuturor codurilor promoționale (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Recuperarea unui singur cod promoțional (vizualizare detaliată)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Creați un cod promoțional" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Ștergeți un cod promoțional" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Rescrieți un cod promoțional existent, economisind non-editabile" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Lista tuturor promoțiilor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Recuperarea unei singure promoții (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Creați o promoție" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +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" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Lista tuturor stocurilor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Recuperarea unui singur stoc (vedere detaliată)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Crearea unei fișe de stoc" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Ștergerea unei înregistrări de stoc" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Rescrierea unei fișe de stoc existente cu salvarea elementelor needitabile" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Listați toate etichetele produselor (vizualizare simplă)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Recuperarea unei singure etichete de produs (vizualizare detaliată)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Creați o etichetă de produs" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Ștergeți o etichetă de produs" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" +"Rescrieți o etichetă de produs existentă salvând elementele needitabile" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " +"needitabile" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Nu a fost furnizat niciun termen de căutare." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Căutare" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Nume și prenume" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Categorii" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Categorii Melci" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Etichete" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Preț minim" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Preț maxim" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Este activ" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Marca" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Atribute" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Cantitate" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Melc" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Este digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Includeți subcategorii" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Includeți produsele comandate personal" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Trebuie să existe un category_uuid pentru a utiliza flagul " +"include_subcategories" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Căutare (ID, numele produsului sau numărul piesei)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Cumpărat după (inclusiv)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Cumpărat înainte (inclusiv)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "E-mail utilizator" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID utilizator" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Statut" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "ID lizibil de către om" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Părinte" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Nivel" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID produs" + +#: 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:41 +msgid "data to store in cache" +msgstr "Date de stocat în cache" + +#: 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:47 +msgid "cached data" +msgstr "Date în cache" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Adăugați un produs la comandă" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Eliminați toate produsele din comandă" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Cumpărați o comandă" + +#: 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: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: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:250 +msgid "remove/add" +msgstr "Eliminare/adăugare" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Vă rugăm să furnizați valoarea `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Adăugați un produs la comandă" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Eliminați un produs din comandă" + +#: 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:510 +msgid "buy a product" +msgstr "Cumpărați o comandă" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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: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:573 +msgid "action must be either `add` or `remove`" +msgstr "Acțiunea trebuie să fie `add` sau `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Șirul de adrese original furnizat de utilizator" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} nu există: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - funcționează ca un farmec" + +#: 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:95 +msgid "grouped attributes" +msgstr "Atribute grupate" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Grupuri de atribute" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Mărci" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Categorii" + +#: 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: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: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." + +#: engine/core/graphene/object_types.py:205 +msgid "tags for this category" +msgstr "Etichete pentru această categorie" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produse din această categorie" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Furnizori" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitudine (coordonata Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitudine (coordonata X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Cum să" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Reprezintă feedback de la un utilizator." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Feedback" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Adresa de facturare" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Prețul total al acestei comenzi" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Sunt toate produsele din comanda digitală" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Tranzacții pentru această comandă" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Ordine" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL imagine" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Imagini ale produsului" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Feedback-uri" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Grupuri de atribute" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Preț" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Cantitate" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Numărul de reacții" + +#: 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:484 +msgid "discount price" +msgstr "Preț redus" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produse" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Coduri promoționale" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produse scoase la vânzare" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promoții" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Furnizor" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produs" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Produse dorite" + +#: 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:654 +msgid "tagged products" +msgstr "Produse etichetate" + +#: 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:665 +msgid "tagged categories" +msgstr "Categorii etichetate" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Etichete \"Categorii" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Numele proiectului" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Numele companiei" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Adresa companiei" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Numărul de telefon al companiei" + +#: 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:681 +msgid "email host user" +msgstr "Utilizator gazdă e-mail" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Suma maximă pentru plată" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Suma minimă pentru plată" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Date analitice" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Date publicitare" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Configurație" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Codul limbii" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Numele limbii" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Indicatorul de limbă, dacă există :)" + +#: 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 +msgid "products search results" +msgstr "Rezultate căutare produse" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Rezultate căutare produse" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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 " +"atributelor în cadrul unui sistem complex." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Părinte al acestui grup" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Grup de atribute părinte" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Numele grupului de atribute" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Grup de atribute" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Reprezintă o entitate furnizor capabilă să stocheze informații despre " +"furnizorii externi și cerințele lor de interacțiune. Clasa Vendor este " +"utilizată pentru a defini și gestiona informațiile referitoare la un " +"furnizor extern. Aceasta stochează numele furnizorului, detaliile de " +"autentificare necesare pentru comunicare și marja procentuală aplicată " +"produselor preluate de la furnizor. Acest model păstrează, de asemenea, " +"metadate și constrângeri suplimentare, ceea ce îl face potrivit pentru " +"utilizarea în sisteme care interacționează cu furnizori terți." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Stochează acreditările și punctele finale necesare pentru comunicarea API a " +"furnizorului" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Informații privind autentificarea" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" +"Definirea marjei de profit pentru produsele preluate de la acest furnizor" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Procentul de majorare al furnizorului" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Numele acestui vânzător" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Numele furnizorului" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "fișier de răspuns" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "ultimul răspuns de prelucrare al vânzătorului" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Calea fișierului de integrare al furnizorului" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Calea de integrare" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Reprezintă o etichetă de produs utilizată pentru clasificarea sau " +"identificarea produselor. Clasa ProductTag este concepută pentru " +"identificarea și clasificarea unică a produselor printr-o combinație de " +"identificator intern al etichetei și un nume de afișare ușor de utilizat. " +"Aceasta acceptă operațiuni exportate prin mixins și oferă personalizarea " +"metadatelor în scopuri administrative." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Identificator intern de etichetă pentru eticheta produsului" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Nume etichetă" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Nume ușor de utilizat pentru eticheta produsului" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Nume afișare etichetă" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Etichetă produs" + +#: engine/core/models.py:229 +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 "" +"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." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "etichetă de categorie" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "Etichete de categorie" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Reprezintă o entitate de categorie pentru organizarea și gruparea " +"elementelor conexe într-o structură ierarhică. Categoriile pot avea relații " +"ierarhice cu alte categorii, susținând relațiile părinte-copil. Clasa " +"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." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Încărcați o imagine care reprezintă această categorie" + +#: engine/core/models.py:277 +msgid "category image" +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" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Părinte al acestei categorii pentru a forma o structură ierarhică" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Categoria de părinți" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Numele categoriei" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Furnizați un nume pentru această categorie" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Adăugați o descriere detaliată pentru această categorie" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Descriere categorie" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Prioritate" + +#: engine/core/models.py:438 +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." +msgstr "" +"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." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Denumirea acestui brand" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Nume de marcă" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Încărcați un logo care reprezintă acest brand" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Brand imagine mică" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Încărcați un logo mare care reprezintă acest brand" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Imagine de marcă mare" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Adăugați o descriere detaliată a mărcii" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Descrierea mărcii" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Categorii opționale cu care acest brand este asociat" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Reprezintă stocul unui produs gestionat în sistem. Această clasă oferă " +"detalii despre relația dintre furnizori, produse și informațiile privind " +"stocurile acestora, precum și proprietăți legate de inventar, cum ar fi " +"prețul, prețul de achiziție, cantitatea, SKU și activele digitale. Face " +"parte din sistemul de gestionare a stocurilor pentru a permite urmărirea și " +"evaluarea produselor disponibile de la diverși furnizori." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Furnizorul care furnizează acest stoc de produse" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Furnizor asociat" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Prețul final pentru client după majorări" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Prețul de vânzare" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Produsul asociat cu această intrare în stoc" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Produs asociat" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Prețul plătit vânzătorului pentru acest produs" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Prețul de achiziție al furnizorului" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Cantitatea disponibilă a produsului în stoc" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Cantitate în stoc" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU atribuit de furnizor pentru identificarea produsului" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "SKU al furnizorului" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Fișier digital" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Atribute de sistem" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Intrări pe stoc" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"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 " +"despre produse și informațiile asociate acestora în cadrul unei aplicații." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Categoria din care face parte acest produs" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Opțional, asociați acest produs cu un brand" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Indică dacă acest produs este livrat digital" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Produsul este digital" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Furnizați o denumire clară de identificare a produsului" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Denumirea produsului" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Adăugați o descriere detaliată a produsului" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Descrierea produsului" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Numărul piesei pentru acest produs" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Numărul piesei" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Stock Keeping Unit pentru acest produs" + +#: engine/core/models.py:720 +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 " +"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." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Grupul acestui atribut" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Șir de caractere" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Număr întreg" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Float" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolean" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Obiect" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Tipul valorii atributului" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Tipul de valoare" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Denumirea acestui atribut" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Numele atributului" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "este filtrabil" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Atributele și valorile care pot fi utilizate pentru filtrarea acestei " +"categorii." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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ă " +"organizare și reprezentare dinamică a caracteristicilor produsului." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Atributul acestei valori" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Produsul specific asociat cu valoarea acestui atribut" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Reprezintă o imagine de produs asociată cu un produs din sistem. Această " +"clasă este concepută pentru a gestiona imagini pentru produse, inclusiv " +"funcționalități pentru încărcarea fișierelor de imagine, asocierea acestora " +"cu produse specifice și determinarea ordinii de afișare a acestora. De " +"asemenea, include o funcție de accesibilitate cu text alternativ pentru " +"imagini." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Textul alt al imaginii" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Încărcați fișierul de imagine pentru acest produs" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Imaginea produsului" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Determină ordinea în care sunt afișate imaginile" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Prioritatea afișării" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Produsul pe care îl reprezintă această imagine" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Imagini ale produsului" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"Reprezintă o campanie promoțională pentru produse cu o reducere. Această " +"clasă este utilizată pentru a defini și gestiona campanii promoționale care " +"oferă o reducere procentuală pentru produse. Clasa include atribute pentru " +"stabilirea ratei de reducere, furnizarea de detalii despre promoție și " +"asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de " +"produse pentru a determina articolele afectate în cadrul campaniei." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Procentul de reducere pentru produsele selectate" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Procent de reducere" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Furnizați un nume unic pentru această promoție" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Numele promoției" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Descrierea promoției" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Selectați ce produse sunt incluse în această promoție" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Produse incluse" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promovare" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"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." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Utilizatorul care deține această listă de dorințe" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Proprietarul listei de dorințe" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Lista dorințelor" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"Reprezintă o înregistrare documentară legată de un produs. Această clasă " +"este utilizată pentru a stoca informații despre documentarele legate de " +"anumite produse, inclusiv încărcările de fișiere și metadatele acestora. " +"Aceasta conține metode și proprietăți pentru gestionarea tipului de fișier " +"și a căii de stocare pentru fișierele documentare. Aceasta extinde " +"funcționalitatea mixinilor specifici și oferă caracteristici personalizate " +"suplimentare." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Documentar" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Documentare" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"Reprezintă o entitate de adresă care include detalii despre locație și " +"asocieri cu un utilizator. Oferă funcționalitate pentru stocarea datelor " +"geografice și de adresă, precum și pentru integrarea cu serviciile de " +"geocodare. Această clasă este concepută pentru a stoca informații detaliate " +"despre adresă, inclusiv componente precum strada, orașul, regiunea, țara și " +"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." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Linia de adresă pentru client" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Linia de adresă" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Strada" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Districtul" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Oraș" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Regiunea" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Cod poștal" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Țara" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Punct de geolocație (longitudine, latitudine)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Răspuns JSON complet de la geocoder pentru această adresă" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Răspuns JSON stocat de la serviciul de geocodare" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adresă" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adrese" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Reprezintă un cod promoțional care poate fi utilizat pentru reduceri, " +"gestionând valabilitatea, tipul de reducere și aplicarea acestuia. Clasa " +"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 " +"respectate constrângerile." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Cod unic utilizat de un utilizator pentru a răscumpăra o reducere" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Cod promoțional de identificare" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Valoarea fixă a reducerii" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Reducere procentuală" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Data la care expiră codul promoțional" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Timpul final de valabilitate" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Timestamp de la care acest cod promoțional este valabil" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Ora de începere a valabilității" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Momentul în care codul promoțional a fost utilizat, gol dacă nu a fost " +"utilizat încă" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Timestamp de utilizare" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Utilizator atribuit" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Cod promoțional" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Coduri promoționale" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " +"sau niciuna." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Codul promoțional a fost deja utilizat" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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ă " +"gestionarea produselor în ciclul de viață al comenzii." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Adresa de facturare utilizată pentru această comandă" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Cod promoțional opțional aplicat la această comandă" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Cod promoțional aplicat" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Adresa de expediere utilizată pentru această comandă" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Adresa de expediere" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Stadiul actual al comenzii în ciclul său de viață" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Stadiul comenzii" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Structura JSON a notificărilor care urmează să fie afișate utilizatorilor, " +"în interfața de administrare este utilizată vizualizarea tabelară" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Utilizatorul care a plasat comanda" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Utilizator" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Momentul în care comanda a fost finalizată" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Cumpărați timp" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Un identificator ușor de citit pentru comandă" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "ID lizibil de către om" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Comandă" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "" +"Un utilizator trebuie să aibă un singur ordin în așteptare la un moment dat!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "Nu puteți adăuga produse la o comandă care nu este în așteptare" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Nu puteți adăuga produse inactive la comandă" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Nu puteți adăuga mai multe produse decât cele disponibile în stoc" + +#: 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 "" +"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} nu există cu interogarea <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Codul promoțional nu există" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Puteți cumpăra numai produse fizice cu adresa de expediere specificată!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adresa nu există" + +#: 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 "" +"Nu puteți achiziționa în acest moment, vă rugăm să încercați din nou în " +"câteva minute." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Valoare forță invalidă" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Nu puteți achiziționa o comandă goală!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "" +"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Un utilizator fără sold nu poate cumpăra cu sold!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Insuficiența fondurilor pentru finalizarea comenzii" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"nu puteți cumpăra fără înregistrare, vă rugăm să furnizați următoarele " +"informații: nume client, e-mail client, număr de telefon client" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Metodă de plată invalidă: {payment_method} de la " +"{available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gestionează feedback-ul utilizatorilor pentru produse. Această clasă este " +"concepută pentru a capta și stoca feedback-ul utilizatorilor pentru anumite " +"produse pe care le-au achiziționat. Aceasta conține atribute pentru a stoca " +"comentariile utilizatorilor, o referință la produsul aferent din comandă și " +"un rating atribuit de utilizator. Clasa utilizează câmpuri din baza de date " +"pentru a modela și gestiona în mod eficient datele de feedback." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "" +"Comentarii furnizate de utilizatori cu privire la experiența lor cu produsul" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Face referire la produsul specific dintr-o comandă despre care este vorba în" +" acest feedback" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Produs aferent comenzii" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Rating atribuit de utilizator pentru produs" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Evaluarea produsului" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +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 " +"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 " +"calcularea prețului total sau generarea unui URL de descărcare pentru " +"produsele digitale. Modelul se integrează cu modelele Order și Product și " +"stochează o referință la acestea." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Prețul plătit de client pentru acest produs la momentul achiziției" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Prețul de achiziție la momentul comenzii" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" +"Comentarii interne pentru administratori cu privire la acest produs comandat" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Observații interne" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Notificări pentru utilizatori" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Reprezentarea JSON a atributelor acestui element" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Atribute de produs ordonate" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Trimitere la comanda mamă care conține acest produs" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Ordinul părinților" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Produsul specific asociat cu această linie de comandă" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Cantitatea acestui produs specific din comandă" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Cantitatea produsului" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Starea actuală a acestui produs în comandă" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Starea liniei de produse" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Comandaprodusul trebuie să aibă o comandă asociată!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Acțiune greșită specificată pentru feedback: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "" +"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Nume și prenume" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "Adresa URL a integrării" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Acreditări de autentificare" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Puteți avea un singur furnizor CRM implicit" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM-uri" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Legătura CRM a comenzii" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Legături CRM pentru comenzi" + +#: engine/core/models.py:1947 +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." +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ă." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Descărcare" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Descărcări" + +#: engine/core/serializers/utility.py:89 +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." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Acasă" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Contactați-ne" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Despre noi" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Mix de clienți (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Clienți noi" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Clienți care revin" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Nicio activitate a clientului în ultimele 30 de zile." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Vânzări zilnice" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Comenzi (FINISHED)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Venituri brute" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Ordine" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brut" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Tablou de bord" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Prezentare generală a veniturilor" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Venituri nete" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Impozite" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Returnări" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Venituri brute" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Fără dată" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Venituri nete" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Rata de rambursare" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Returnat" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Stoc redus" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Nu există articole cu stoc redus." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Cele mai returnate produse (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Niciun retur în ultimele 30 de zile." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Cel mai dorit produs" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Nu există încă date." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Cel mai popular produs" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Linkuri rapide" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Nu există legături disponibile." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Livrat vs Digital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Livrat" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Principalele categorii în funcție de cantitate (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Nicio categorie de vânzări în ultimele 30 de zile." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Administratorul site-ului Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Confirmarea comenzii" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Bună ziua %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Vă mulțumim pentru comanda dvs. #%(order.pk)s! Suntem încântați să vă " +"informăm că am preluat comanda dvs. în lucru. Mai jos sunt detaliile " +"comenzii dvs:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Total" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Preț total" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Dacă aveți întrebări, nu ezitați să contactați asistența noastră la " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Cele mai bune salutări,
echipa %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Toate drepturile rezervate" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Comanda livrată" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Bună ziua %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Am procesat cu succes comanda dvs. №%(order_uuid)s! Mai jos sunt detaliile " +"comenzii dvs:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"informații suplimentare\n" +" informații suplimentare" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Valoare" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Dacă aveți întrebări, nu ezitați să contactați asistența noastră la " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Cele mai bune salutări,
echipa %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Cheie" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Adaugă rând" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promocode acordat" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Vă mulțumim pentru că stați cu noi! V-am acordat un cod promoțional\n" +" pentru" + +#: 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" +" 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:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Preț de livrare" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Comanda dvs. va fi livrată la următoarea adresă:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Salutări,
Echipa %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"toate drepturile\n" +" rezervate" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Sunt necesare atât datele, cât și timpul de așteptare" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +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 "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | confirmarea comenzii" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | comandă livrată" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Nu aveți permisiunea de a efectua această acțiune." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Parametrul NOMINATIM_URL trebuie să fie configurat!" + +#: engine/core/validators.py:19 +#, python-brace-format +msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" +msgstr "" +"Dimensiunile imaginii nu trebuie să depășească w{max_width} x h{max_height} " +"pixeli" + +#: engine/core/views.py:91 +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 "" +"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:106 +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 "" +"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." + +#: engine/core/views.py:141 +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:173 +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:192 +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." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Gestionează trimiterea formularelor `contact us`." + +#: engine/core/views.py:240 +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." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Gestionează interogările de căutare globală." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid este necesar" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "comanda produsul nu există" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Puteți descărca activul digital o singură dată" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Produsul de comandă nu are un produs" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon nu a fost găsit" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"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 " +"`redirect` din Django pentru gestionarea redirecționării HTTP." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Returnează versiunea curentă a eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Venituri și comenzi (ultimul %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definește un set de vizualizări pentru gestionarea operațiunilor legate de " +"Evibes. Clasa EvibesViewSet moștenește din ModelViewSet și oferă " +"funcționalitate pentru gestionarea acțiunilor și operațiunilor asupra " +"entităților Evibes. Aceasta include suport pentru clase de serializare " +"dinamice în funcție de acțiunea curentă, permisiuni personalizabile și " +"formate de redare." + +#: 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." +msgstr "" +"Reprezintă un set de vizualizări pentru gestionarea obiectelor " +"AttributeGroup. Gestionează operațiunile legate de AttributeGroup, inclusiv " +"filtrarea, serializarea și extragerea datelor. Această clasă face parte din " +"stratul API al aplicației și oferă o modalitate standardizată de a procesa " +"cererile și răspunsurile pentru datele AttributeGroup." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +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." + +#: 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." +msgstr "" +"Un set de vizualizări pentru gestionarea obiectelor AttributeValue. Acest " +"set de vizualizări oferă funcționalități pentru listarea, extragerea, " +"crearea, actualizarea și ștergerea obiectelor AttributeValue. Se integrează " +"cu mecanismele viewset ale Django REST Framework și utilizează " +"serializatoare adecvate pentru diferite acțiuni. Capacitățile de filtrare " +"sunt furnizate prin DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Gestionează vizualizările pentru operațiunile legate de categorie. Clasa " +"CategoryViewSet este responsabilă de gestionarea operațiunilor legate de " +"modelul Category din sistem. Aceasta acceptă recuperarea, filtrarea și " +"serializarea datelor de categorie. De asemenea, setul de vizualizări impune " +"permisiuni pentru a se asigura că numai utilizatorii autorizați pot accesa " +"date specifice." + +#: 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 "" +"Reprezintă un set de vizualizări pentru gestionarea instanțelor Brand. " +"Această clasă oferă funcționalități pentru interogarea, filtrarea și " +"serializarea obiectelor Brand. Utilizează cadrul ViewSet al Django pentru a " +"simplifica implementarea punctelor finale API pentru obiectele Brand." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +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 " +"metode pentru recuperarea detaliilor produsului, aplicarea permisiunilor și " +"accesarea feedback-ului aferent unui produs." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"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: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 " +"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 " +"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: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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet pentru gestionarea comenzilor și a operațiunilor conexe. Această " +"clasă oferă funcționalități pentru recuperarea, modificarea și gestionarea " +"obiectelor de comandă. Aceasta include diverse puncte finale pentru " +"gestionarea operațiunilor de comandă, cum ar fi adăugarea sau eliminarea de " +"produse, efectuarea de achiziții pentru utilizatorii înregistrați și " +"neînregistrați și recuperarea comenzilor în așteptare ale utilizatorului " +"autentificat curent. ViewSet utilizează mai multe serializatoare în funcție " +"de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " +"timpul interacțiunii cu datele comenzii." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"Oferă un set de vizualizări pentru gestionarea entităților OrderProduct. " +"Acest set de vizualizări permite operațiuni CRUD și acțiuni personalizate " +"specifice modelului OrderProduct. Acesta include filtrarea, verificarea " +"permisiunilor și schimbarea serializatorului în funcție de acțiunea " +"solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" +"ului privind instanțele OrderProduct" + +#: 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." + +#: engine/core/viewsets.py:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " +"acțiuni API." + +#: 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: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: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 " +"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 pentru gestionarea operațiunilor Wishlist. WishlistViewSet oferă " +"puncte finale pentru interacțiunea cu lista de dorințe a unui utilizator, " +"permițând extragerea, modificarea și personalizarea produselor din lista de " +"dorințe. Acest ViewSet facilitează funcționalități precum adăugarea, " +"eliminarea și acțiunile în masă pentru produsele din lista de dorințe. " +"Verificările permisiunilor sunt integrate pentru a se asigura că " +"utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " +"cazului în care sunt acordate permisiuni explicite." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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 " +"comportamente specializate pentru diferite metode HTTP, înlocuiri ale " +"serializatorului și gestionarea permisiunilor în funcție de contextul " +"cererii." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Eroare de geocodare: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Gestionează operațiunile legate de etichetele produselor în cadrul " +"aplicației. Această clasă oferă funcționalități pentru recuperarea, " +"filtrarea și serializarea obiectelor etichetă de produs. Aceasta suportă " +"filtrarea flexibilă pe baza unor atribute specifice utilizând backend-ul de " +"filtrare specificat și utilizează în mod dinamic serializatoare diferite în " +"funcție de acțiunea efectuată." diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.mo b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo new file mode 100644 index 00000000..7b10ade3 Binary files /dev/null and b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.po b/engine/core/locale/ru_RU/LC_MESSAGES/django.po new file mode 100644 index 00000000..33d6410c --- /dev/null +++ b/engine/core/locale/ru_RU/LC_MESSAGES/django.po @@ -0,0 +1,3522 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: ru-ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Уникальный идентификатор" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"Уникальный идентификатор используется для точной идентификации любого " +"объекта базы данных" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Активен" + +#: engine/core/abstract.py:21 +msgid "" +"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" +msgstr "Создано" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Когда объект впервые появился в базе данных" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Модифицированный" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Когда объект был отредактирован в последний раз" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Переводы" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Общие сведения" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Отношения" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "дополнительная информация" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Метаданные" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Временные метки" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "Активировать выбранный %(verbose_name_plural)s" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "Выбранные сущности активированы!" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "Деактивировать выбранный %(verbose_name_plural)s" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "Выбранные сущности были деактивированы!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Значения атрибутов" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Изображение" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Изображения" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Наличие" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Наличия" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Заказанный товар" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Дети" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Конфигурация" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Главное" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Готовые" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Доставка" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Доставлено" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Отменено" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Не удалось" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "В ожидании" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Принято" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Возвращенные деньги" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Оплата" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Моментальный" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Успешный" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Схема OpenAPI в выбранном формате с выбранным языком" + +#: engine/core/docs/drf/views.py:33 +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 "" +"Схема OpenApi3 для этого API. Формат может быть выбран через согласование " +"содержимого. Язык может быть выбран с помощью Accept-Language и параметра " +"запроса." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "Ввод/вывод кэша" + +#: engine/core/docs/drf/views.py:46 +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 "" +"Применяйте только ключ для чтения разрешенных данных из кэша.\n" +"Применяйте ключ, данные и таймаут с аутентификацией для записи данных в кэш." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Получите список поддерживаемых языков" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Получите параметры приложения, которые можно использовать" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "Отправьте сообщение в службу поддержки" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "Запросите URL-адрес с поддержкой CORS. Допускается только https." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Поиск между продуктами, категориями и брендами" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "" +"Ручка глобального поиска для запросов по всем открытым таблицам проекта" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Приобрести заказ в качестве предприятия" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Приобретите заказ как бизнес, используя предоставленные `продукты` с " +"`product_uuid` и `attributes`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "загрузить цифровой актив из приобретенного цифрового заказа" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Список всех групп атрибутов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Получение одной группы атрибутов (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Создайте группу атрибутов" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Удаление группы атрибутов" + +#: engine/core/docs/drf/viewsets.py:89 +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 "" +"Переписывание некоторых полей существующей группы атрибутов с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Список всех атрибутов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Получение одного атрибута (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Создайте атрибут" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Удалить атрибут" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Переписать существующий атрибут, сохранив нередактируемый" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Переписывание некоторых полей существующего атрибута с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Список всех значений атрибутов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Получение значения одного атрибута (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Создание значения атрибута" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Удалить значение атрибута" + +#: engine/core/docs/drf/viewsets.py:179 +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 "" +"Переписывание некоторых полей существующего значения атрибута с сохранением " +"нередактируемых значений" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Список всех категорий (простой вид)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Получение одной категории (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "UUID или slug категории" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Создайте категорию" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Удалить категорию" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "Мета-данные для SEO" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Возвращает снимок SEO-метаданных категории." + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Список всех категорий (простой вид)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"Поиск подстроки с учетом регистра в 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" +msgstr "Отфильтруйте ордера с buy_time >= этому времени ISO 8601" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Отфильтруйте ордера с buy_time <= этому времени ISO 8601" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Фильтр по точному UUID заказа" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Фильтр по точному человекочитаемому идентификатору заказа" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Фильтр по электронной почте пользователя (точное совпадение без учета " +"регистра)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Фильтр по UUID пользователя" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" +"Упорядочивайте по одному из следующих признаков: 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)" +msgstr "Получение одной категории (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "UUID заказа или человекочитаемый идентификатор" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Создайте атрибут" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Не работает для нештатных пользователей." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Удалить атрибут" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Покупная цена на момент заказа" + +#: engine/core/docs/drf/viewsets.py:382 +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`, инициируется транзакция." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "получить текущий отложенный ордер пользователя" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "извлекает текущий отложенный заказ аутентифицированного пользователя" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "приобретение заказа без создания учетной записи" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "завершает покупку заказа для незарегистрированного пользователя." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Добавить товар в заказ" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Добавляет товар в заказ, используя предоставленные `product_uuid` и " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Добавьте список продуктов для заказа, количество не учитывается" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Добавляет список товаров в заказ, используя предоставленные `product_uuid` и" +" `attributes`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Удалить продукт из заказа" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Удаляет товар из заказа, используя предоставленные `product_uuid` и " +"`attributes`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Удалите продукт из заказа, количество не будет учитываться" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Удаляет список товаров из заказа, используя предоставленные `product_uuid` и" +" `attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Список всех атрибутов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Для пользователей, не являющихся сотрудниками, возвращаются только их " +"собственные списки желаний." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Получение одного атрибута (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Создайте атрибут" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Не работает для нештатных пользователей." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Удалить атрибут" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Переписать существующий атрибут, сохранив нередактируемый" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Переписывание некоторых полей существующего атрибута с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "получение текущего списка желаний пользователя" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"Получает текущий ожидающий список желаний аутентифицированного пользователя" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Добавить товар в заказ" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Добавляет товар в список желаний, используя предоставленный `product_uuid`." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Удалить продукт из списка желаний" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Удаляет продукт из списка желаний, используя предоставленный `product_uuid`." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Добавьте много товаров в список желаний" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Добавляет множество товаров в список желаний, используя предоставленные " +"`product_uuids`." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Удалить продукт из заказа" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `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" +"• **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" +"`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" +"Примеры: \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 +msgid "list all products (simple view)" +msgstr "Список всех продуктов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "(точный) UUID продукта" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Получение одного продукта (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "Создать продукт" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "" +"Обновление некоторых полей существующего продукта с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Удалить продукт" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "список всех разрешенных отзывов о продукте" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Возвращает снимок метаданных SEO продукта." + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Перечислите все адреса" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Получение одного адреса" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Создайте новый адрес" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Удалить адрес" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Обновление всего адреса" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Частичное обновление адреса" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Автозаполнение ввода адреса" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Строка запроса сырых данных, пожалуйста, дополните ее данными с конечной " +"точки geo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "ограничивает количество результатов, 1 < limit < 10, по умолчанию: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "список всех отзывов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "получить один отзыв (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "создать отзыв" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "удалить отзыв" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "список всех отношений \"заказ-продукт\" (простой вид)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "получить одно отношение \"заказ-продукт\" (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "создать новое отношение \"заказ-продукт" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "заменить существующее отношение \"заказ-продукт" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "частично обновить существующее отношение \"заказ-продукт" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "удалить отношение \"заказ-продукт" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "добавлять или удалять отзывы о связи заказ-продукт" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Список всех брендов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Извлечение одного бренда (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID бренда или ссылка" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Создайте бренд" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Удалить бренд" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Список всех продавцов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Получение данных по одному поставщику (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Создать поставщика" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Удалить поставщика" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Список всех изображений товаров (простой вид)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Получение изображения одного продукта (детальный просмотр)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Создайте изображение продукта" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Удаление изображения продукта" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Список всех промокодов (простой вид)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Получение одного промокода (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Создайте промокод" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Удалить промокод" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Список всех рекламных акций (простой вид)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Получение одной акции (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Создайте рекламную акцию" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Удалить акцию" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Список всех акций (простой вид)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Получение одной акции (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Создайте запись о запасах" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Удаление записи о запасах" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Список всех тегов товара (простой вид)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Получение одной метки товара (подробный просмотр)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Создайте тег продукта" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Удаление тега продукта" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" +"Переписать существующую категорию с сохранением нередактируемых объектов" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Переписать некоторые поля существующей категории с сохранением " +"нередактируемых полей" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Поисковый запрос не предоставлен." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Поиск" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Имя" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Категории" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Категории Слизни" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Теги" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Мин. цена" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Максимальная цена" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Активен" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Бренд" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Атрибуты" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Количество" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Слаг" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Цифровой" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Включите подкатегории" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Включите продукты, заказанные лично" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "Артикул" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Для использования флага include_subcategories должен быть указан " +"category_uuid." + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Поиск (идентификатор, название продукта или номер детали)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Куплено после (включительно)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Куплено ранее (включительно)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Электронная почта пользователя" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID пользователя" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Статус" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Человекочитаемый идентификатор" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Родитель" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Вся категория (есть хотя бы 1 продукт или нет)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Уровень" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "UUID продукта" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "Ключ, который нужно найти в тайнике или вложить в него" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "Данные для хранения в кэше" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "Тайм-аут в секундах для занесения данных в кэш" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "Кэшированные данные" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "Camelized JSON-данные из запрашиваемого URL" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "Добавить товар в заказ" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "Удалить продукт из заказа" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "Удалить все товары из заказа" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Купить заказ" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "Выполните действие над списком товаров в заказе" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "Удалить/добавить" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "Выполните действие над списком продуктов в списке желаний" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "Пожалуйста, укажите значение `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Добавить товар в заказ" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "Удалить продукт из заказа" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "Удалить продукт из заказа" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "Удалить продукт из заказа" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "Купить заказ" + +#: 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" + +#: engine/core/graphene/mutations.py:549 +msgid "add or delete a feedback for orderproduct" +msgstr "Добавить или удалить отзыв для продукта заказа" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "Действие должно быть либо `add`, либо `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Оригинальная строка адреса, предоставленная пользователем" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} не существует: {uuid}!" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "Предел должен быть от 1 до 10" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - работает как шарм" + +#: 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:95 +msgid "grouped attributes" +msgstr "Сгруппированные атрибуты" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Группы атрибутов" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Бренды" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Категории" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "" +"Какие атрибуты и значения можно использовать для фильтрации этой категории." + +#: 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:205 +msgid "tags for this category" +msgstr "Теги для этой категории" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Продукты в этой категории" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Поставщики" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Широта (координата Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Долгота (координата X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Как" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Представляет собой отзыв пользователя." + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "Если применимо, загрузите url для этого продукта заказа" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Обратная связь" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "Список товаров, заказанных в этом заказе" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Адрес для выставления счетов" + +#: 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:414 +msgid "total price of this order" +msgstr "Общая стоимость этого заказа" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "Общее количество продуктов в заказе" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "Все ли товары в заказе представлены в цифровом виде" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Операции для этого заказа" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Заказы" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL-адрес изображения" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Изображения товара" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Отзывы" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Группы атрибутов" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Цена" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Количество" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Количество отзывов" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "Продукты доступны только для личных заказов" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Цена со скидкой" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Товары" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Промокоды" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Продукты в продаже" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Промоакции" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Поставщик" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Товар" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Продукты из списка желаний" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Списки желаний" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Tagged products" + +#: 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:665 +msgid "tagged categories" +msgstr "Категории с метками" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Теги категорий" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Название проекта" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Название компании" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Адрес компании" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Номер телефона компании" + +#: 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:681 +msgid "email host user" +msgstr "Пользователь узла электронной почты" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Максимальная сумма для оплаты" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Минимальная сумма для оплаты" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Аналитические данные" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Рекламные данные" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Конфигурация" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Код языка" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Название языка" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Языковой флаг, если он существует :)" + +#: 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 +msgid "products search results" +msgstr "Результаты поиска товаров" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Результаты поиска товаров" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"Представляет группу атрибутов, которая может быть иерархической. Этот класс " +"используется для управления и организации групп атрибутов. Группа атрибутов " +"может иметь родительскую группу, образуя иерархическую структуру. Это может " +"быть полезно для категоризации и более эффективного управления атрибутами в " +"сложной системе." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Родитель этой группы" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Родительская группа атрибутов" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Имя группы атрибутов" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Группа атрибутов" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Представляет собой сущность поставщика, способную хранить информацию о " +"внешних поставщиках и требованиях к их взаимодействию. Класс Vendor " +"используется для определения и управления информацией, связанной с внешним " +"поставщиком. Он хранит имя поставщика, данные аутентификации, необходимые " +"для взаимодействия, и процентную наценку, применяемую к продуктам, " +"полученным от поставщика. Эта модель также содержит дополнительные " +"метаданные и ограничения, что делает ее пригодной для использования в " +"системах, взаимодействующих со сторонними поставщиками." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Хранит учетные данные и конечные точки, необходимые для взаимодействия с API" +" поставщика." + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Информация об аутентификации" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Определите наценку для товаров, полученных от этого продавца" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Процент наценки поставщика" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Имя этого продавца" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Название поставщика" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "файл ответа" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "последний ответ поставщика на обработку" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Путь к файлу интеграции поставщика" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Путь интеграции" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Представляет тег продукта, используемый для классификации или идентификации " +"продуктов. Класс ProductTag предназначен для уникальной идентификации и " +"классификации продуктов с помощью комбинации внутреннего идентификатора тега" +" и удобного для пользователя отображаемого имени. Он поддерживает операции, " +"экспортируемые через миксины, и обеспечивает настройку метаданных для " +"административных целей." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Внутренний идентификатор тега для тега продукта" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Название тега" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Удобное название для метки продукта" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Отображаемое имя тега" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Метка продукта" + +#: engine/core/models.py:229 +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 "" +"Представляет тег категории, используемый для продуктов. Этот класс " +"моделирует тег категории, который может быть использован для ассоциации и " +"классификации продуктов. Он включает атрибуты для внутреннего идентификатора" +" тега и удобного для пользователя отображаемого имени." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "тег категории" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "теги категорий" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Представляет собой объект категории для организации и группировки связанных " +"элементов в иерархическую структуру. Категории могут иметь иерархические " +"отношения с другими категориями, поддерживая отношения \"родитель-ребенок\"." +" Класс включает поля для метаданных и визуального представления, которые " +"служат основой для функций, связанных с категориями. Этот класс обычно " +"используется для определения и управления категориями товаров или другими " +"подобными группировками в приложении, позволяя пользователям или " +"администраторам указывать название, описание и иерархию категорий, а также " +"назначать атрибуты, такие как изображения, теги или приоритет." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Загрузите изображение, представляющее эту категорию" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Изображение категории" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Определите процент наценки для товаров в этой категории" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Родитель данной категории для формирования иерархической структуры" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Родительская категория" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Название категории" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Укажите название этой категории" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Добавьте подробное описание для этой категории" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Описание категории" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "теги, которые помогают описать или сгруппировать эту категорию" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Приоритет" + +#: engine/core/models.py:438 +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." +msgstr "" +"Представляет объект Brand в системе. Этот класс обрабатывает информацию и " +"атрибуты, связанные с брендом, включая его название, логотипы, описание, " +"связанные категории, уникальную метку и порядок приоритетов. Он позволяет " +"организовать и представить данные, связанные с брендом, в приложении." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Название этой марки" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Название бренда" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Загрузите логотип, представляющий этот бренд" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Маленький образ бренда" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Загрузите большой логотип, представляющий этот бренд" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Большой имидж бренда" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Добавьте подробное описание бренда" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Описание бренда" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 и цифровые " +"активы. Он является частью системы управления запасами, позволяющей " +"отслеживать и оценивать продукты, доступные у различных поставщиков." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Поставщик, поставляющий данный товар на склад" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Ассоциированный поставщик" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Окончательная цена для покупателя после наценок" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Цена продажи" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Продукт, связанный с этой складской записью" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Сопутствующий товар" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Цена, уплаченная продавцу за этот продукт" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Цена покупки у поставщика" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Доступное количество продукта на складе" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Количество на складе" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Присвоенный поставщиком SKU для идентификации продукта" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Артикул поставщика" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Цифровой файл, связанный с этой акцией, если применимо" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Цифровой файл" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Атрибуты системы" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Наличия" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Представляет продукт с такими атрибутами, как категория, бренд, теги, " +"цифровой статус, название, описание, номер детали и метка. Предоставляет " +"связанные с ним полезные свойства для получения оценок, количества отзывов, " +"цены, количества и общего числа заказов. Предназначен для использования в " +"системе, которая занимается электронной коммерцией или управлением запасами." +" Этот класс взаимодействует со связанными моделями (такими как Category, " +"Brand и ProductTag) и управляет кэшированием часто используемых свойств для " +"повышения производительности. Он используется для определения и " +"манипулирования данными о товаре и связанной с ним информацией в приложении." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Категория, к которой относится этот продукт" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "По желанию ассоциируйте этот продукт с брендом" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Теги, которые помогают описать или сгруппировать этот продукт" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Указывает, поставляется ли этот продукт в цифровом виде" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Является ли продукт цифровым" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Обеспечьте четкое идентификационное название продукта" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Название продукта" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Добавьте подробное описание продукта" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Описание товара" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Парт. номер для данного товара" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Парт. номер" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Единица складского учета для данного продукта" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"Представляет атрибут в системе. Этот класс используется для определения и " +"управления атрибутами, которые представляют собой настраиваемые фрагменты " +"данных, которые могут быть связаны с другими сущностями. Атрибуты имеют " +"связанные с ними категории, группы, типы значений и имена. Модель " +"поддерживает множество типов значений, включая строку, целое число, " +"плавающую форму, булевую форму, массив и объект. Это позволяет динамично и " +"гибко структурировать данные." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Группа этого атрибута" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Строка" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Целое число" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Поплавок" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Булево" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Массив" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Объект" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Тип значения атрибута" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Тип значения" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Имя этого атрибута" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Имя атрибута" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "поддается фильтрации" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Какие атрибуты и значения можно использовать для фильтрации этой категории." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" +"Представляет собой конкретное значение для атрибута, связанного с продуктом." +" Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше " +"организовать и динамически представить характеристики продукта." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Атрибут этого значения" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Конкретный продукт, связанный со значением этого атрибута" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "" +"Предоставьте альтернативный текст для изображения, чтобы обеспечить " +"доступность" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Альтовый текст изображения" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Загрузите файл изображения для этого продукта" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Изображение продукта" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Определяет порядок отображения изображений" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Приоритет отображения" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Продукт, который представлен на этом изображении" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Изображения товаров" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"Представляет рекламную кампанию для товаров со скидкой. Этот класс " +"используется для определения и управления рекламными кампаниями, " +"предлагающими скидку на продукты в процентах. Класс включает атрибуты для " +"установки размера скидки, предоставления подробной информации о рекламной " +"акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом " +"товаров для определения товаров, на которые распространяется акция." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Процентная скидка на выбранные продукты" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Процент скидки" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Укажите уникальное имя для этой акции" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Название акции" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Описание акции" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Выберите, какие продукты участвуют в этой акции" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Включенные продукты" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Продвижение" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Представляет собой список желаний пользователя для хранения и управления " +"желаемыми товарами. Класс предоставляет функциональность для управления " +"коллекцией товаров, поддерживая такие операции, как добавление и удаление " +"товаров, а также поддерживая операции добавления и удаления нескольких " +"товаров одновременно." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Продукты, которые пользователь отметил как желаемые" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Пользователь, владеющий этим списком желаний" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Владелец вишлиста" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Список желаний" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"Представляет документальную запись, связанную с продуктом. Этот класс " +"используется для хранения информации о документальных записях, связанных с " +"конкретными продуктами, включая загруженные файлы и их метаданные. Он " +"содержит методы и свойства для обработки типа файла и пути хранения " +"документальных файлов. Он расширяет функциональность определенных миксинов и" +" предоставляет дополнительные пользовательские возможности." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Документальный фильм" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Документальные фильмы" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"Представляет адресную сущность, включающую сведения о местоположении и " +"ассоциации с пользователем. Обеспечивает функциональность для хранения " +"географических и адресных данных, а также интеграцию с сервисами " +"геокодирования. Этот класс предназначен для хранения подробной адресной " +"информации, включая такие компоненты, как улица, город, регион, страна, а " +"также геолокация (долгота и широта). Он поддерживает интеграцию с API " +"геокодирования, позволяя хранить необработанные ответы API для дальнейшей " +"обработки или проверки. Класс также позволяет ассоциировать адрес с " +"пользователем, что облегчает работу с персонализированными данными." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Адресная строка для клиента" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Адресная строка" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Улица" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Округ" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Город" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Регион" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Почтовый индекс" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Страна" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Геолокационная точка(долгота, широта)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Полный JSON-ответ от геокодера для этого адреса" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Сохраненный JSON-ответ от сервиса геокодирования" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Адрес" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Адреса" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Представляет промокод, который можно использовать для получения скидки, " +"управляя его сроком действия, типом скидки и применением. Класс PromoCode " +"хранит информацию о промокоде, включая его уникальный идентификатор, " +"свойства скидки (размер или процент), срок действия, связанного пользователя" +" (если таковой имеется) и статус его использования. Он включает в себя " +"функциональность для проверки и применения промокода к заказу, обеспечивая " +"при этом соблюдение ограничений." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Уникальный код, используемый пользователем для получения скидки" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Идентификатор промо-кода" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Фиксированная сумма скидки" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "" +"Процентная скидка, применяемая, если фиксированная сумма не используется" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Процентная скидка" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Временная метка, когда истекает срок действия промокода" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Время окончания срока действия" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Время, с которого действует этот промокод" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Время начала действия" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Временная метка, когда был использован промокод, пустая, если он еще не " +"использовался" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Временная метка использования" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Пользователь, назначенный на этот промокод, если применимо" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Назначенный пользователь" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Промокод" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Промокоды" + +#: engine/core/models.py:1150 +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" +msgstr "Промокоды" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Неверный тип скидки для промокода {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "Адрес для выставления счетов, используемый для данного заказа" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Дополнительный промокод, применяемый к этому заказу" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Примененный промокод" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Адрес доставки, используемый для данного заказа" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Адрес доставки" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Текущий статус заказа в его жизненном цикле" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Статус заказа" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON-структура уведомлений для отображения пользователям, в административном" +" интерфейсе используется табличный вид" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON-представление атрибутов заказа для этого заказа" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Пользователь, разместивший заказ" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Пользователь" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Временная метка, когда заказ был завершен" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Время покупки" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Человекочитаемый идентификатор для заказа" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "человекочитаемый идентификатор" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Заказ" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Пользователь может одновременно иметь только один отложенный ордер!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "Вы не можете добавить товары в заказ, который не является отложенным." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Вы не можете добавить неактивные товары в заказ" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "" +"Вы не можете удалить товары из заказа, который не является отложенным." + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} не существует с запросом <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Промокод не существует" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Вы можете купить физические товары только с указанным адресом доставки!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Адрес не существует" + +#: 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 "" +"В данный момент вы не можете совершить покупку, пожалуйста, повторите " +"попытку через несколько минут." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Недопустимое значение силы" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Вы не можете приобрести пустой заказ!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Вы не можете купить заказ без пользователя!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Пользователь без баланса не может покупать с балансом!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Недостаточно средств для выполнения заказа" + +#: engine/core/models.py:1575 +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}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "Комментарии пользователей об их опыте использования продукта" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "Комментарии к отзывам" + +#: engine/core/models.py:1719 +msgid "" +"references the specific product in an order that this feedback is about" +msgstr "" +"Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Сопутствующий товар для заказа" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Присвоенный пользователем рейтинг продукта" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Рейтинг продукции" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Представляет продукты, связанные с заказами, и их атрибуты. Модель " +"OrderProduct хранит информацию о продукте, который является частью заказа, " +"включая такие детали, как цена покупки, количество, атрибуты продукта и " +"статус. Она управляет уведомлениями для пользователя и администраторов и " +"обрабатывает такие операции, как возврат остатка товара или добавление " +"отзывов. Эта модель также предоставляет методы и свойства, поддерживающие " +"бизнес-логику, например расчет общей цены или генерацию URL-адреса загрузки " +"для цифровых продуктов. Модель интегрируется с моделями Order и Product и " +"хранит ссылки на них." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Покупная цена на момент заказа" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "" +"Внутренние комментарии для администраторов об этом заказанном продукте" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Внутренние комментарии" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Уведомления пользователей" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON-представление атрибутов этого элемента" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Атрибуты заказанного продукта" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Ссылка на родительский заказ, содержащий данный продукт" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Родительский приказ" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Конкретный продукт, связанный с этой линией заказа" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Количество данного товара в заказе" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Количество продукта" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Текущий статус этого продукта в заказе" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Состояние продуктовой линейки" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "У заказанного продукта должен быть связанный с ним заказ!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Для обратной связи указано неверное действие: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "Вы не можете отозвать заказ, который не был получен" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Имя" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL-адрес интеграции" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Учетные данные для аутентификации" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "У вас может быть только один поставщик CRM по умолчанию" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Ссылка на CRM заказа" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Ссылки на CRM заказов" + +#: engine/core/models.py:1947 +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." +msgstr "" +"Представляет функциональность загрузки цифровых активов, связанных с " +"заказами. Класс DigitalAssetDownload предоставляет возможность управления и " +"доступа к загрузкам, связанным с продуктами заказа. Он хранит информацию о " +"связанном с заказом продукте, количестве загрузок и о том, является ли актив" +" общедоступным. Он включает метод для генерации URL-адреса для загрузки " +"актива, когда связанный заказ находится в состоянии завершения." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Скачать" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Скачать" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"чтобы добавить отзыв, необходимо указать комментарий, рейтинг и uuid " +"продукта заказа." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Главная" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Свяжитесь с нами" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "О нас" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Ассортимент клиентов (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Новые клиенты" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Возвращение клиентов" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Отсутствие активности клиентов за последние 30 дней." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Ежедневные продажи" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Заказы (ОКОНЧЕНЫ)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Валовая выручка" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Заказы" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Брутто" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Приборная панель" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Обзор доходов" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Чистая выручка" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Налоги" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Возвраты" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Валовая выручка" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Нет даты" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Чистая выручка" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Ставка возврата" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Возвращено" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Низкий запас" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Нет товаров с низким уровнем запасов." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Большинство возвращенных товаров (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "За последние 30 дней возвратов не было." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Самые желанные товары" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Данных пока нет." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Самые популярные товары" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Быстрые ссылки" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Ссылки недоступны." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Доставка и цифровые технологии (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Цифровой" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Отправлено" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Лучшие категории по количеству (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "За последние 30 дней не было ни одной продажи в категории." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Администратор сайта Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Подтверждение заказа" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Логотип" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Привет %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Благодарим вас за заказ #%(order.pk)s! Мы рады сообщить Вам, что приняли Ваш" +" заказ в работу. Ниже приведены детали вашего заказа:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Всего" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Общая цена" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "С наилучшими пожеланиями,
команда %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Все права защищены" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Заказ доставлен" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Привет %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Мы успешно обработали ваш заказ №%(order_uuid)s! Ниже приведены детали " +"вашего заказа:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"дополнительная\n" +" информация" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Значение" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Если у вас возникнут вопросы, обращайтесь в нашу службу поддержки по адресу " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "С наилучшими пожеланиями,
команда %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Ключ" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Добавить строку" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Предоставленный промокод" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Спасибо, что остаетесь с нами! Мы предоставили вам промокод\n" +" для" + +#: 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" +" the details of your order:" +msgstr "" +"Спасибо за ваш заказ! Мы рады подтвердить вашу покупку. Ниже приведены " +"детали вашего заказа:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Цена доставки" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Ваш заказ будет доставлен по следующему адресу:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "С наилучшими пожеланиями,
Команда %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"все права\n" +" защищены" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Требуются как данные, так и тайм-аут" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" +"Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до " +"216000 секунд" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | свяжитесь с нами по инициативе" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | подтверждение заказа" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | заказ доставлен" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "У вас нет разрешения на выполнение этого действия." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Параметр NOMINATIM_URL должен быть настроен!" + +#: engine/core/validators.py:19 +#, 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} " +"пикселей" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" +"Возвращает список поддерживаемых языков и соответствующую информацию о них." + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Возвращает параметры сайта в виде объекта JSON." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Выполняет операции с кэшем, такие как чтение и установка данных кэша с " +"заданным ключом и таймаутом." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Обрабатывает отправленные формы `contact us`." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Обрабатывает запросы на обработку и проверку URL из входящих POST-запросов." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Обрабатывает глобальные поисковые запросы." + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "Работает с логикой покупки как бизнеса без регистрации." + +#: engine/core/views.py:332 +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." +msgstr "" +"Обрабатывает загрузку цифрового актива, связанного с заказом.\n" +"Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "требуется order_product_uuid" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "заказанный товар не существует" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Вы можете загрузить цифровой актив только один раз" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "заказ должен быть оплачен до загрузки цифрового актива" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "У заказанного продукта нет продукта" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon не найден" + +#: engine/core/views.py:404 +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." +msgstr "" +"Обрабатывает запросы на фавикон веб-сайта.\n" +"Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." + +#: engine/core/views.py:416 +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 "" +"Перенаправляет запрос на индексную страницу админки. Функция обрабатывает " +"входящие HTTP-запросы и перенаправляет их на индексную страницу интерфейса " +"администратора Django. Для обработки HTTP-перенаправления используется " +"функция Django `redirect`." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Возвращает текущую версию eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Доходы и заказы (последние %(days)d)" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "Возвращает пользовательские переменные для Dashboard." + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Определяет набор представлений для управления операциями, связанными с " +"Evibes. Класс EvibesViewSet наследует от ModelViewSet и предоставляет " +"функциональность для обработки действий и операций над сущностями Evibes. Он" +" включает в себя поддержку динамических классов сериализаторов в зависимости" +" от текущего действия, настраиваемые разрешения и форматы рендеринга." + +#: 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." +msgstr "" +"Представляет собой набор представлений для управления объектами " +"AttributeGroup. Обрабатывает операции, связанные с AttributeGroup, включая " +"фильтрацию, сериализацию и извлечение данных. Этот класс является частью " +"уровня API приложения и обеспечивает стандартизированный способ обработки " +"запросов и ответов на данные AttributeGroup." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Обрабатывает операции, связанные с объектами Attribute в приложении. " +"Предоставляет набор конечных точек API для взаимодействия с данными " +"Attribute. Этот класс управляет запросами, фильтрацией и сериализацией " +"объектов Attribute, позволяя динамически управлять возвращаемыми данными, " +"например, фильтровать по определенным полям или получать подробную или " +"упрощенную информацию в зависимости от запроса." + +#: 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." +msgstr "" +"Набор представлений для управления объектами AttributeValue. Этот набор " +"представлений предоставляет функциональность для перечисления, извлечения, " +"создания, обновления и удаления объектов AttributeValue. Он интегрируется с " +"механизмами наборов представлений Django REST Framework и использует " +"соответствующие сериализаторы для различных действий. Возможности фильтрации" +" предоставляются через DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Управляет представлениями для операций, связанных с категорией. Класс " +"CategoryViewSet отвечает за обработку операций, связанных с моделью Category" +" в системе. Он поддерживает получение, фильтрацию и сериализацию данных " +"категории. Набор представлений также обеспечивает соблюдение прав доступа, " +"чтобы только авторизованные пользователи могли получить доступ к " +"определенным данным." + +#: 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 "" +"Представляет собой набор представлений для управления экземплярами Brand. " +"Этот класс предоставляет функциональность для запросов, фильтрации и " +"сериализации объектов Brand. Он использует фреймворк Django ViewSet для " +"упрощения реализации конечных точек API для объектов Brand." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Управляет операциями, связанными с моделью `Product` в системе. Этот класс " +"предоставляет набор представлений для управления продуктами, включая их " +"фильтрацию, сериализацию и операции над конкретными экземплярами. Он " +"расширяется от `EvibesViewSet` для использования общей функциональности и " +"интегрируется с фреймворком Django REST для операций RESTful API. Включает " +"методы для получения информации о продукте, применения разрешений и доступа " +"к связанным отзывам о продукте." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Представляет собой набор представлений для управления объектами Vendor. Этот" +" набор представлений позволяет получать, фильтровать и сериализовать данные " +"о поставщиках. Он определяет наборы запросов, конфигурации фильтров и классы" +" сериализаторов, используемые для выполнения различных действий. Цель этого " +"класса - обеспечить упрощенный доступ к ресурсам, связанным с Vendor, через " +"фреймворк Django REST." + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"Представление набора представлений, обрабатывающих объекты Feedback. Этот " +"класс управляет операциями, связанными с объектами отзывов, включая " +"составление списка, фильтрацию и получение подробной информации. Цель этого " +"набора представлений - предоставить различные сериализаторы для различных " +"действий и реализовать обработку доступных объектов Feedback на основе прав " +"доступа. Он расширяет базовый `EvibesViewSet` и использует систему " +"фильтрации Django для запроса данных." + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet для управления заказами и связанными с ними операциями. Этот класс " +"предоставляет функциональность для получения, изменения и управления " +"объектами заказов. Он включает в себя различные конечные точки для обработки" +" операций с заказами, таких как добавление или удаление продуктов, " +"выполнение покупок для зарегистрированных и незарегистрированных " +"пользователей, а также получение информации о текущих заказах " +"аутентифицированного пользователя. ViewSet использует несколько " +"сериализаторов в зависимости от конкретного выполняемого действия и " +"соответствующим образом устанавливает разрешения при взаимодействии с " +"данными заказа." + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"Предоставляет набор представлений для управления сущностями OrderProduct. " +"Этот набор представлений позволяет выполнять CRUD-операции и " +"пользовательские действия, специфичные для модели OrderProduct. Он включает " +"фильтрацию, проверку прав доступа и переключение сериализатора в зависимости" +" от запрашиваемого действия. Кроме того, он предоставляет подробное действие" +" для обработки отзывов об экземплярах OrderProduct" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "" +"Управляет операциями, связанными с изображениями продуктов в приложении." + +#: 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:914 +msgid "Represents a view set for managing promotions. " +msgstr "" +"Представляет собой набор представлений для управления рекламными акциями." + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "Выполняет операции, связанные с данными о запасах в системе." + +#: 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 " +"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 облегчает такие функции, как добавление, " +"удаление и массовые действия для продуктов списка желаний. Встроенная " +"проверка прав доступа гарантирует, что пользователи смогут управлять только " +"своими списками желаний, если не предоставлены явные права." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Этот класс предоставляет функциональность набора представлений для " +"управления объектами `Адрес`. Класс AddressViewSet позволяет выполнять CRUD-" +"операции, фильтрацию и пользовательские действия, связанные с объектами " +"адреса. Он включает в себя специализированное поведение для различных " +"методов HTTP, переопределение сериализатора и обработку разрешений в " +"зависимости от контекста запроса." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Ошибка геокодирования: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +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 new file mode 100644 index 00000000..74df0057 Binary files /dev/null and b/engine/core/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.po b/engine/core/locale/sv_SE/LC_MESSAGES/django.po new file mode 100644 index 00000000..4c22742b --- /dev/null +++ b/engine/core/locale/sv_SE/LC_MESSAGES/django.po @@ -0,0 +1,3475 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: sv-se\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Unikt ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "Unikt ID används för att säkert identifiera alla databasobjekt" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Är aktiv" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Skapad" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "När objektet först dök upp på databasen" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Modifierad" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "När objektet senast redigerades" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Översättningar" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Allmänt" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Relationer" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "Ytterligare information" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Tidsstämplar" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Valda artiklar har aktiverats!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Valda objekt har avaktiverats!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Attributets värden" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Bild" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Bilder" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stock" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Stocks" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Beställ produkt" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Barn och ungdomar" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfig" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Kärnan" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Färdig" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Leverera" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Levereras" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Annullerad" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Misslyckades" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Avvaktande" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Accepterad" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Återbetalda pengar" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Betalning" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Framgångsrik" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "OpenAPI-schema i valt format med valt språk" + +#: engine/core/docs/drf/views.py:33 +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 "" +"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:37 +msgid "cache I/O" +msgstr "Cache I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Hämta en lista över språk som stöds" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Hämta applikationens exponerbara parametrar" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Begär en CORSed URL. Endast https tillåtet." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Sök mellan produkter, kategorier och varumärken" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Global sökpunkt för att söka i projektets alla tabeller" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Köpa en order som ett företag" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Köp en order som ett företag, med hjälp av de tillhandahållna `produkterna` " +"med `produkt_uuid` och `attribut`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "ladda ner en digital tillgång från en köpt digital order" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Lista alla attributgrupper (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Hämta en enskild attributgrupp (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Skapa en attributgrupp" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Ta bort en attributgrupp" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +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" +msgstr "" +"Skriv om vissa fält i en befintlig attributgrupp och spara icke-redigerbara " +"fält" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Lista alla attribut (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Hämta ett enskilt attribut (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Skapa ett attribut" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Ta bort ett attribut" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +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" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Lista alla attributvärden (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Hämta ett enskilt attributvärde (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Skapa ett attributvärde" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Ta bort ett attributvärde" + +#: engine/core/docs/drf/viewsets.py:179 +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" +msgstr "" +"Skriva om vissa fält i ett befintligt attributvärde och spara icke-" +"redigerbara fält" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Lista alla kategorier (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Hämta en enskild kategori (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Kategori UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Skapa en kategori" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Ta bort en kategori" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara" + +#: 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 "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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returnerar en ögonblicksbild av kategorins SEO-metadata" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Lista alla kategorier (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"För användare som inte är anställda returneras endast deras egna " +"beställningar." + +#: 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" +msgstr "" +"Substringsökning utan skiftlägeskänslighet över human_readable_id, " +"order_products.product.name och order_products.product.partnumber" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Filtrera order med buy_time >= denna ISO 8601-datumtid" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Filtrera order med buy_time <= denna ISO 8601-datumtid" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Filtrera efter exakt order UUID" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +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)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Filtrera efter användarens UUID" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +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 " +"ordning (t.ex. \"-buy_time\")." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Hämta en enskild kategori (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Order UUID eller mänskligt läsbart id" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Skapa ett attribut" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Fungerar inte för användare som inte är anställda." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Ta bort ett attribut" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Inköpspris vid ordertillfället" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Slutför orderköpet. Om `force_balance` används, slutförs köpet med " +"användarens saldo; Om `force_payment` används, initieras en transaktion." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "hämta aktuell pågående order för en användare" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "köpa en order utan att skapa ett konto" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "slutför orderköpet för en icke registrerad användare." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Lägg till en produkt i ordern" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Lägger till en produkt till en order med hjälp av de angivna `product_uuid` " +"och `attributes`." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Lägg till en lista med produkter till ordern, kvantiteter räknas inte" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Lägger till en lista med produkter till en order med hjälp av de angivna " +"`product_uuid` och `attributes`." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Ta bort en produkt från ordern" + +#: engine/core/docs/drf/viewsets.py:439 +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`." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Ta bort en produkt från ordern, kvantiteter räknas inte" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Tar bort en lista med produkter från en order med hjälp av de angivna " +"`product_uuid` och `attributes`." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +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." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Hämta ett enskilt attribut (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Skapa ett attribut" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Fungerar inte för användare som inte är anställda." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Ta bort ett attribut" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +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" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "hämta aktuell väntande önskelista för en användare" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "hämtar en aktuell väntande önskelista för en autentiserad användare" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Lägg till en produkt i ordern" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Lägger till en produkt i en önskelista med hjälp av den angivna " +"`product_uuid`." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Ta bort en produkt från önskelistan" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Tar bort en produkt från en önskelista med hjälp av den angivna " +"`product_uuid`" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Lägg till många produkter på önskelistan" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Lägger till många produkter till en önskelista med hjälp av de angivna " +"`product_uuids`" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Ta bort en produkt från ordern" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Tar bort många produkter från en önskelista med hjälp av de angivna " +"`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" +"• **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" +"`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" +"- **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" +"`b64-beskrivning=icontains-aGVhdC1jb2xk`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "Lista alla produkter (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**Allowed:** uuid, rating, name, slug, created, modified, price, random" +msgstr "" +"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 +msgid "retrieve a single product (detailed view)" +msgstr "Hämta en enskild produkt (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Skriva om en befintlig produkt och bevara icke redigerbara fält" + +#: 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 "" +"Uppdatera vissa fält i en befintlig produkt och bevara icke redigerbara fält" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Ta bort en produkt" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "listar alla tillåtna återkopplingar för en produkt" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Returnerar en ögonblicksbild av produktens SEO-metadata" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Lista alla adresser" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Hämta en enskild adress" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Skapa en ny adress" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Ta bort en adress" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Uppdatera en hel adress" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Delvis uppdatera en adress" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Autokomplettering av adressinmatning" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "Frågesträng för rådata, komplettera med data från geo-IP-slutpunkt" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "begränsar resultatmängden, 1 < limit < 10, standard: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "lista alla återkopplingar (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "hämta en enskild feedback (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "skapa en återkoppling" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "ta bort en återkoppling" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "skriva om en befintlig feedback och spara icke-redigerbara filer" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"skriva om vissa fält i en befintlig feedback och spara icke-redigerbara fält" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "lista alla order-produktrelationer (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "hämta en enskild order-produktrelation (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "skapa en ny relation mellan order och produkt" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "ersätta en befintlig order-produktrelation" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "delvis uppdatera en befintlig order-produktrelation" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "ta bort en order-produktrelation" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "lägga till eller ta bort feedback om en order-produktrelation" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Lista alla varumärken (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Hämta ett enskilt varumärke (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "UUID eller slug för varumärke" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Skapa ett varumärke" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Ta bort ett varumärke" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" +"Skriva om ett befintligt varumärke och spara icke-redigerbara produkter" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Skriva om vissa fält i ett befintligt varumärke och spara icke-redigerbara " +"fält" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Lista alla leverantörer (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Hämta en enskild leverantör (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Skapa en leverantör" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Ta bort en leverantör" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Skriva om en befintlig leverantör och spara icke-redigerbara filer" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Skriva om vissa fält i en befintlig leverantör och spara icke-redigerbara " +"fält" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Lista alla produktbilder (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Hämta en enskild produktbild (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Skapa en produktbild" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Ta bort en produktbild" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "Skriva om en befintlig produktbild och spara icke-redigerbara objekt" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Skriva om några fält i en befintlig produktbild och spara icke-redigerbara " +"fält" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Lista alla kampanjkoder (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Hämta en enskild kampanjkod (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Skapa en kampanjkod" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Ta bort en kampanjkod" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "Skriva om en befintlig kampanjkod som sparar icke-redigerbara" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Skriva om vissa fält i en befintlig kampanjkod och spara icke-redigerbara " +"fält" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Lista alla kampanjer (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Hämta en enskild kampanj (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Skapa en kampanj" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Ta bort en kampanj" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Skriv om en befintlig kampanj som sparar icke-redigerbara" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Skriva om vissa fält i en befintlig kampanj och spara icke-redigerbara fält" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Lista alla aktier (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Hämta en enskild aktie (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Skapa en lagerpost" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Ta bort en lagerpost" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "Skriva om en befintlig lagerpost och spara icke-redigerbara uppgifter" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Skriva om vissa fält i en befintlig lagerpost och spara icke-redigerbara " +"uppgifter" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Lista alla produkttaggar (enkel vy)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Hämta en enskild produkttagg (detaljerad vy)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Skapa en produkttagg" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Ta bort en produkttagg" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Skriv om en befintlig produkttagg och spara icke-redigerbara objekt" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Skriva om vissa fält i en befintlig produkttagg och spara icke-redigerbara " +"fält" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Ingen sökterm angavs." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Sök" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Namn" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Kategorier" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Kategorier Sniglar" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Etiketter" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Min pris" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Max pris" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Är aktiv" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Varumärke" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Attribut" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Kvantitet" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Snigel" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Är digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Inkludera underkategorier" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Inkludera personligt beställda produkter" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"Det måste finnas en category_uuid för att använda flaggan " +"include_subcategories" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Sök (ID, produktnamn eller artikelnummer)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Köpt efter (inklusive)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Köpt tidigare (inklusive)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Användarens e-post" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "Användarens UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Status" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Human Readable ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Förälder" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Hela kategorin (har minst 1 produkt eller inte)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Nivå" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Produktens UUID" + +#: 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:41 +msgid "data to store in cache" +msgstr "Data som ska lagras i cacheminnet" + +#: 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:47 +msgid "cached data" +msgstr "Cachad data" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Lägg till en produkt i ordern" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Ta bort alla produkter från ordern" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Köpa en order" + +#: 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!" + +#: 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: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:250 +msgid "remove/add" +msgstr "Ta bort/lägga till" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Vänligen ange värdet för `wishlist_uuid`." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Lägg till en produkt i ordern" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Ta bort en produkt från ordern" + +#: 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:510 +msgid "buy a product" +msgstr "Köpa en order" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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: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:573 +msgid "action must be either `add` or `remove`" +msgstr "Åtgärden måste vara antingen `add` eller `remove`!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "Originaladresssträng som tillhandahålls av användaren" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} existerar inte: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - fungerar som en smäck" + +#: 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:95 +msgid "grouped attributes" +msgstr "Grupperade attribut" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Grupper av attribut" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Brands" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Kategorier" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Taggar för denna kategori" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Produkter i denna kategori" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Leverantörer" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Latitud (Y-koordinat)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Longitud (X-koordinat)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Hur gör man" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Representerar feedback från en användare." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Återkoppling" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Faktureringsadress" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Totalpris för denna order" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Är alla produkter i beställningen digitala" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "Transaktioner för denna order" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Beställningar" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL för bild" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Produktens bilder" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Återkoppling" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Attributgrupper" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Pris" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Kvantitet" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Antal återkopplingar" + +#: 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:484 +msgid "discount price" +msgstr "Rabatterat pris" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Produkter" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promokoder" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Produkter på rea" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Kampanjer" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Leverantör" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Produkt" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "Önskelistade produkter" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Önskelistor" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Taggade produkter" + +#: 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:665 +msgid "tagged categories" +msgstr "Taggade kategorier" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Kategoriernas taggar" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Projektets namn" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Företagets namn" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Företagets adress" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Företagets telefonnummer" + +#: 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" + +#: engine/core/graphene/object_types.py:681 +msgid "email host user" +msgstr "E-post värd användare" + +#: 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:683 +msgid "minimum amount for payment" +msgstr "Lägsta belopp för betalning" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analysdata" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Annonsdata" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Konfiguration" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Språkkod" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Språkets namn" + +#: 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: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 +msgid "products search results" +msgstr "Sökresultat för produkter" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Sökresultat för produkter" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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ändbart för att kategorisera och hantera attribut på ett mer effektivt " +"sätt i ett komplext system." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Förälder till denna grupp" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Överordnad attributgrupp" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Attributgruppens namn" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Attributgrupp" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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 " +"interagerar med tredjepartsleverantörer." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Lagrar autentiseringsuppgifter och ändpunkter som krävs för leverantörens " +"API-kommunikation" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Autentiseringsinformation" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" +"Definiera markeringen för produkter som hämtas från den här leverantören" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Leverantörens påslag i procent" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Namn på denna säljare" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Leverantörens namn" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "svarsfil" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "säljarens senaste bearbetningssvar" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Sökväg till leverantörens integrationsfil" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Integrationsväg" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"Representerar en produkttagg som används för att klassificera eller " +"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." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Intern taggidentifierare för produkttaggen" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tagg namn" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Användarvänligt namn för produkttaggen" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Taggens visningsnamn" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Produktmärkning" + +#: engine/core/models.py:229 +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 "" +"Representerar en kategoritagg som används för produkter. Den här klassen " +"modellerar en kategoritagg som kan användas för att associera och " +"klassificera produkter. Den innehåller attribut för en intern " +"taggidentifierare och ett användarvänligt visningsnamn." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "kategori tagg" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "Kategoritaggar" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"Representerar en kategorientitet för att organisera och gruppera relaterade " +"objekt i en hierarkisk struktur. Kategorier kan ha hierarkiska relationer " +"med andra kategorier, vilket stöder förälder-barn-relationer. Klassen " +"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 " +"som bilder, taggar eller prioritet." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Ladda upp en bild som representerar denna kategori" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Kategori bild" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Definiera en påslagsprocent för produkter i den här kategorin" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Förälder till denna kategori för att bilda en hierarkisk struktur" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Föräldrakategori" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Namn på kategori" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Ange ett namn för denna kategori" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Lägg till en detaljerad beskrivning för denna kategori" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Beskrivning av kategori" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Prioritet" + +#: engine/core/models.py:438 +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." +msgstr "" +"Representerar ett Brand-objekt i systemet. Klassen hanterar information och " +"attribut som är relaterade till ett varumärke, inklusive dess namn, " +"logotyper, beskrivning, associerade kategorier, en unik slug och " +"prioritetsordning. Den gör det möjligt att organisera och representera " +"varumärkesrelaterade data i applikationen." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Namn på detta varumärke" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Varumärke" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Ladda upp en logotyp som representerar detta varumärke" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Varumärke liten image" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Ladda upp en stor logotyp som representerar detta varumärke" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Varumärke med stor image" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Lägg till en detaljerad beskrivning av varumärket" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Varumärkesbeskrivning" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Valfria kategorier som detta varumärke är förknippat med" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Representerar lagret för en produkt som hanteras i systemet. Klassen ger " +"information om förhållandet mellan leverantörer, produkter och deras " +"lagerinformation, samt lagerrelaterade egenskaper som pris, inköpspris, " +"kvantitet, SKU och digitala tillgångar. Den är en del av " +"lagerhanteringssystemet för att möjliggöra spårning och utvärdering av " +"produkter som finns tillgängliga från olika leverantörer." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Leverantören som levererar denna produkt lager" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Associerad leverantör" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Slutligt pris till kunden efter påslag" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Försäljningspris" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Produkten som är associerad med denna lagerpost" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Tillhörande produkt" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Det pris som betalats till säljaren för denna produkt" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Leverantörens inköpspris" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Tillgänglig kvantitet av produkten i lager" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Antal i lager" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "SKU som tilldelats av leverantören för identifiering av produkten" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Leverantörens SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Digital fil associerad med detta lager om tillämpligt" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Digital fil" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Systemattribut" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Lagerposter" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +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 " +"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 " +"en applikation." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Kategori som denna produkt tillhör" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Möjlighet att associera produkten med ett varumärke" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Anger om denna produkt levereras digitalt" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Är produkten digital" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Tillhandahålla ett tydligt identifierande namn för produkten" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Produktens namn" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Lägg till en detaljerad beskrivning av produkten" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Produktbeskrivning" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Artikelnummer för denna produkt" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Artikelnummer" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Lagerhållningsenhet för denna produkt" + +#: engine/core/models.py:720 +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 " +"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 " +"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." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Grupp av detta attribut" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Sträng" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Heltal" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Flottör" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolean" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Array" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Objekt" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Typ av attributets värde" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Typ av värde" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Namn på detta attribut" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Attributets namn" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "är filtrerbar" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Vilka attribut och värden som kan användas för att filtrera denna kategori." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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 " +"möjliggör bättre organisation och dynamisk representation av " +"produktegenskaper." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Attribut för detta värde" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Den specifika produkt som är associerad med detta attributs värde" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Representerar en produktbild som är associerad med en produkt i systemet. " +"Klassen är utformad för att hantera bilder för produkter, inklusive " +"funktioner för att ladda upp bildfiler, associera dem med specifika " +"produkter och bestämma deras visningsordning. Den innehåller också en " +"tillgänglighetsfunktion med alternativ text för bilderna." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Tillhandahåll alternativ text för bilden för tillgänglighet" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Alt-text för bild" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Ladda upp bildfilen för den här produkten" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Produktbild" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Bestämmer i vilken ordning bilderna ska visas" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Prioritet för visning" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Den produkt som denna bild representerar" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Produktbilder" + +#: engine/core/models.py:868 +msgid "" +"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." +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 " +"rabatt för produkter. Klassen innehåller attribut för att ställa in " +"rabattsatsen, tillhandahålla information om kampanjen och länka den till de " +"tillämpliga produkterna. Den integreras med produktkatalogen för att " +"fastställa vilka artiklar som påverkas av kampanjen." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Procentuell rabatt för de valda produkterna" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Rabattprocent" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Ange ett unikt namn för denna kampanj" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Kampanjens namn" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Beskrivning av kampanjen" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Välj vilka produkter som ingår i denna kampanj" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Inkluderade produkter" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Marknadsföring" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"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, samt stöd för operationer för att lägga till och ta bort flera " +"produkter samtidigt." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Produkter som användaren har markerat som önskade" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Användare som äger denna önskelista" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Wishlist's ägare" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Önskelista" + +#: engine/core/models.py:985 +msgid "" +"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." +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." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Dokumentärfilm" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Dokumentärer" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Adressrad till kunden" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Adresslinje" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Gata" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Distrikt" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Stad" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Region" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Postnummer" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Land" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Geolokaliseringspunkt (longitud, latitud)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Fullständigt JSON-svar från geokodaren för denna adress" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Lagrad JSON-svar från geokodningstjänsten" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adress" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresser" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Representerar en kampanjkod som kan användas för rabatter och hanterar dess " +"giltighet, typ av rabatt och tillämpning. Klassen PromoCode lagrar " +"information om en kampanjkod, inklusive dess unika identifierare, " +"rabattegenskaper (belopp eller procent), giltighetsperiod, associerad " +"användare (om någon) och status för dess användning. Den innehåller " +"funktioner för att validera och tillämpa kampanjkoden på en order och " +"samtidigt säkerställa att begränsningarna uppfylls." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Unik kod som används av en användare för att lösa in en rabatt" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Identifierare för kampanjkod" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Fast rabattbelopp tillämpas om procent inte används" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Fast diskonteringsbelopp" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Procentuell rabatt som tillämpas om fast belopp inte används" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Procentuell rabatt" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Tidsstämpel när kampanjkoden upphör att gälla" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Slutgiltig giltighetstid" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Tidsstämpel från vilken denna promokod är giltig" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Start giltighetstid" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Tidsstämpel när kampanjkoden användes, tom om den inte har använts ännu" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Tidsstämpel för användning" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Användare som tilldelats denna promokod om tillämpligt" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Tilldelad användare" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Kampanjkod" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Kampanjkoder" + +#: engine/core/models.py:1150 +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." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promokoden har redan använts" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Ogiltig rabattyp för promokod {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"set, and shipping or billing details updated. Equally, functionality " +"supports managing the products in the order lifecycle." +msgstr "" +"Representerar en order som lagts av en användare. Denna klass modellerar en " +"order i applikationen, inklusive dess olika attribut som fakturerings- och " +"leveransinformation, status, associerad användare, meddelanden och " +"relaterade operationer. Beställningar kan ha associerade produkter, " +"kampanjer kan tillämpas, adresser kan anges och leverans- eller " +"faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten " +"hanteringen av produkterna i orderns livscykel." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Den faktureringsadress som används för denna order" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Valfri kampanjkod tillämpas på denna beställning" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Tillämpad kampanjkod" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Den leveransadress som används för denna order" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Leveransadress" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Aktuell status för ordern i dess livscykel" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Orderstatus" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"JSON-struktur för meddelanden som ska visas för användare, i admin UI " +"används tabellvyn" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "JSON-representation av orderattribut för denna order" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Användaren som gjorde beställningen" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Användare" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Tidsstämpel när ordern slutfördes" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Köp tid" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "En mänskligt läsbar identifierare för ordern" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "mänskligt läsbart ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Beställning" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "En användare får bara ha en väntande order åt gången!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"Du kan inte lägga till produkter i en order som inte är en pågående order" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Du kan inte lägga till inaktiva produkter i ordern" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Du kan inte lägga till fler produkter än vad som finns i lager" + +#: 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 "" +"Du kan inte ta bort produkter från en order som inte är en pågående order" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} finns inte med frågan <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promokoden finns inte" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "Du kan bara köpa fysiska produkter med angiven leveransadress!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Adressen finns inte" + +#: 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 "Du kan inte köpa just nu, vänligen försök igen om några minuter." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Ogiltigt kraftvärde" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Du kan inte köpa en tom order!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Du kan inte köpa en order utan en användare!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "En användare utan balans kan inte köpa med balans!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Otillräckliga medel för att slutföra ordern" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"du kan inte köpa utan registrering, vänligen ange följande information: " +"kundens namn, kundens e-post, kundens telefonnummer" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Ogiltig betalningsmetod: {payment_method} från {available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +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." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "Kommentarer från användare om deras erfarenhet av produkten" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Refererar till den specifika produkten i en order som denna feedback handlar" +" om" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Relaterad order produkt" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Användartilldelat betyg för produkten" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Produktbetyg" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Representerar produkter som är kopplade till order och deras attribut. " +"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 " +"och lagrar en referens till dem." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Det pris som kunden betalade för denna produkt vid inköpstillfället" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Inköpspris vid ordertillfället" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Interna kommentarer för administratörer om denna beställda produkt" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Interna kommentarer" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Meddelanden till användare" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "JSON-representation av detta objekts attribut" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Sorterade produktattribut" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Referens till den överordnade order som innehåller denna produkt" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Föräldraorder" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Den specifika produkt som är kopplad till denna orderrad" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Antal av denna specifika produkt i ordern" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Produktens kvantitet" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Aktuell status för denna produkt i ordern" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Status för produktlinje" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderprodukt måste ha en tillhörande order!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Fel åtgärd angiven för återkoppling: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "du kan inte återkoppla en order som inte mottagits" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Namn" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL för integrationen" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Autentiseringsuppgifter" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Du kan bara ha en CRM-leverantör som standard" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM-system" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Beställningens CRM-länk" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Beställningarnas CRM-länkar" + +#: engine/core/models.py:1947 +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." +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." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Nedladdningar" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Nedladdningar" + +#: engine/core/serializers/utility.py:89 +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." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Hem" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Kontakta oss" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Om oss" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Kundmix (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Nya kunder" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Återkommande kunder" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Ingen kundaktivitet under de senaste 30 dagarna." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Daglig försäljning" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Beställningar (AVSLUTAD)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Bruttointäkter" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Beställningar" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Instrumentpanel" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Översikt över intäkter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Nettoomsättning" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Skatter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Avkastning" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Bruttointäkter" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Inget datum" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Nettoomsättning" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Återbetalningsgrad" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Återlämnad" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Låg lagerhållning" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Inga låglagervaror." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Mest returnerade produkter (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Inga returer under de senaste 30 dagarna." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Mest önskade produkt" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Inga uppgifter ännu." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Mest populära produkt" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Snabblänkar" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Inga länkar tillgängliga." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Skickat eller digitalt (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Digital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Levereras" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Toppkategorier efter antal (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Ingen kategoriförsäljning under de senaste 30 dagarna." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django webbplatsadministratör" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Orderbekräftelse" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logotyp" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Hej %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Tack för din beställning #%(order.pk)s! Vi är glada att kunna informera dig " +"om att vi har tagit din beställning i arbete. Nedan följer detaljerna för " +"din order:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Totalt" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Totalt pris" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Om du har några frågor är du välkommen att kontakta vår support på " +"%(config.EMAIL_HOST_USER)s." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Bästa hälsningar,
teamet %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Alla rättigheter förbehålls" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Beställning levererad" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Hej %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Vi har framgångsrikt behandlat din beställning №%(order_uuid)s! Nedan finns " +"detaljerna i din beställning:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"ytterligare\n" +" information" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Värde" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Om du har några frågor är du välkommen att kontakta vår support på " +"%(contact_email)s." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Bästa hälsningar,
teamet %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Nyckel" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Lägg till rad" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promokod beviljad" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Tack för att du stannar hos oss! Vi har gett dig en promokod\n" +" för" + +#: 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" +" the details of your order:" +msgstr "" +"Tack för din beställning! Vi är glada att kunna bekräfta ditt köp. Nedan " +"följer detaljerna för din beställning:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Fraktpris" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Din beställning kommer att levereras till följande adress:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Bästa hälsningar,
The %(config.PROJECT_NAME)s team" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"Alla rättigheter\n" +" reserverade" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Både data och timeout krävs" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | kontakta oss initierad" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | orderbekräftelse" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | order levererad" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Du har inte behörighet att utföra den här åtgärden." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Parametern NOMINATIM_URL måste konfigureras!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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:106 +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 "" +"Hanterar det detaljerade vysvaret för en webbplatskarta. Denna funktion " +"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:141 +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:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Returnerar webbplatsens parametrar som ett JSON-objekt." + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Hanterar cacheoperationer som att läsa och ställa in cachedata med en " +"angiven nyckel och timeout." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Hanterar formulärinlämningar för `kontakta oss`." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Hanterar förfrågningar om bearbetning och validering av URL:er från " +"inkommande POST-förfrågningar." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Hanterar globala sökfrågor." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid är obligatoriskt" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "Beställ produkten finns inte" + +#: engine/core/views.py:353 +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:356 +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:362 +msgid "the order product does not have a product" +msgstr "Beställningens produkt har ingen produkt" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon hittades inte" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"Omdirigerar begäran till indexsidan för admin. Funktionen hanterar " +"inkommande HTTP-begäranden och omdirigerar dem till indexsidan för Djangos " +"admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera " +"HTTP-omdirigeringen." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "Returnerar aktuell version av eVibes." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Intäkter och order (senast %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +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 " +"stöd för dynamiska serializerklasser baserat på den aktuella åtgärden, " +"anpassningsbara behörigheter och renderingsformat." + +#: 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." +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." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Hanterar operationer relaterade till Attribute-objekt inom applikationen. " +"Tillhandahåller en uppsättning API-slutpunkter för att interagera med " +"attributdata. Denna klass hanterar frågor, filtrering och serialisering av " +"Attribute-objekt, vilket möjliggör dynamisk kontroll över de data som " +"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: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." +msgstr "" +"Ett viewset för hantering av AttributeValue-objekt. Denna viewset " +"tillhandahåller funktionalitet för att lista, hämta, skapa, uppdatera och " +"radera AttributeValue-objekt. Den integreras med Django REST Framework's " +"viewset-mekanismer och använder lämpliga serializers för olika åtgärder. " +"Filtreringsfunktioner tillhandahålls genom DjangoFilterBackend." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Hanterar vyer för Category-relaterade operationer. Klassen CategoryViewSet " +"är ansvarig för att hantera operationer som är relaterade till Category-" +"modellen i systemet. Den stöder hämtning, filtrering och serialisering av " +"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: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 "" +"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 " +"implementeringen av API-slutpunkter för varumärkesobjekt." + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"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 " +"`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:574 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +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, " +"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: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 " +"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, " +"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: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 " +"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 " +"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: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 " +"feedback on OrderProduct instances" +msgstr "" +"Tillhandahåller en vy för hantering av OrderProduct-enheter. Denna " +"vyuppsättning möjliggör CRUD-operationer och anpassade åtgärder som är " +"specifika för OrderProduct-modellen. Det inkluderar filtrering, " +"behörighetskontroller och serializer-växling baserat på den begärda " +"åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " +"feedback på OrderProduct-instanser" + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" +"åtgärder." + +#: 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:927 +msgid "Handles operations related to Stock data in the system." +msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." + +#: 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 " +"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 hantering av önskelistor. WishlistViewSet tillhandahåller " +"slutpunkter för att interagera med en användares önskelista, vilket " +"möjliggör hämtning, modifiering och anpassning av produkter i önskelistan. " +"Denna ViewSet underlättar funktionalitet som att lägga till, ta bort och " +"bulkåtgärder för önskelistans produkter. Behörighetskontroller är " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Denna klass tillhandahåller viewset-funktionalitet för hantering av " +"`Address`-objekt. Klassen AddressViewSet möjliggör CRUD-operationer, " +"filtrering och anpassade åtgärder relaterade till adressentiteter. Den " +"innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" +"överskrivningar och behörighetshantering baserat på förfrågningskontexten." + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Fel i geokodningen: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +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." diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.mo b/engine/core/locale/th_TH/LC_MESSAGES/django.mo new file mode 100644 index 00000000..00ee5006 Binary files /dev/null and b/engine/core/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.po b/engine/core/locale/th_TH/LC_MESSAGES/django.po new file mode 100644 index 00000000..1eff3301 --- /dev/null +++ b/engine/core/locale/th_TH/LC_MESSAGES/django.po @@ -0,0 +1,3437 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: th-th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "รหัสประจำตัวที่ไม่ซ้ำกัน" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "รหัสประจำตัวที่ไม่ซ้ำกันใช้เพื่อระบุวัตถุฐานข้อมูลใด ๆ อย่างแน่นอน" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "กำลังใช้งานอยู่" + +#: engine/core/abstract.py:21 +msgid "" +"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" +msgstr "สร้างขึ้น" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "เมื่อวัตถุปรากฏขึ้นครั้งแรกในฐานข้อมูล" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "แก้ไขแล้ว" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "การแปล" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "ทั่วไป" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "ความสัมพันธ์" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "ข้อมูลเพิ่มเติม" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "เมตาดาตา" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "เวลาที่บันทึก" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "ค่าของแอตทริบิวต์" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "ภาพ" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "รูปภาพ" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "สต็อก" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "หุ้น" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "สั่งซื้อสินค้า" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "เด็ก" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "การกำหนดค่า" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "แกนหลัก" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "เสร็จแล้ว" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "การส่งมอบ" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "ส่งมอบแล้ว" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "ยกเลิก" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "ล้มเหลว" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "รอดำเนินการ" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "ได้รับการยอมรับ" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "เงินคืน" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "การชำระเงิน" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "ชั่วขณะหนึ่ง" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "ประสบความสำเร็จ" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "สคีมา OpenAPI ในรูปแบบที่เลือกพร้อมภาษาที่เลือก" + +#: engine/core/docs/drf/views.py:33 +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 "" +"OpenApi3 schema สำหรับ API นี้. รูปแบบสามารถเลือกได้ผ่านการเจรจาเนื้อหา. " +"ภาษาสามารถเลือกได้ทั้งผ่าน Accept-Language และพารามิเตอร์ค้นหา." + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "แคช I/O" + +#: engine/core/docs/drf/views.py:46 +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" +msgstr "รับรายการภาษาที่รองรับ" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "รับพารามิเตอร์ที่สามารถเปิดเผยได้ของแอปพลิเคชัน" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "ส่งข้อความถึงทีมสนับสนุน" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "ขอ URL ที่รองรับ CORS เท่านั้น อนุญาตเฉพาะ https" + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "ค้นหาสินค้า หมวดหมู่ และแบรนด์" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "จุดสิ้นสุดการค้นหาทั่วโลกเพื่อค้นหาข้ามตารางของโครงการ" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "ซื้อสินค้าเป็นธุรกิจ" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"ซื้อสินค้าในฐานะธุรกิจ โดยใช้ `products` ที่ให้มาพร้อมกับ `product_uuid` และ" +" `attributes`" + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "ดาวน์โหลดสินทรัพย์ดิจิทัลจากคำสั่งซื้อดิจิทัลที่ซื้อแล้ว" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "แสดงกลุ่มแอตทริบิวต์ทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "ดึงกลุ่มแอตทริบิวต์เดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "สร้างกลุ่มคุณลักษณะ" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "ลบกลุ่มแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:89 +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 "" +"เขียนฟิลด์บางส่วนของกลุ่มแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "แสดงรายการคุณลักษณะทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "ดึงข้อมูลคุณลักษณะเดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "สร้างแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "ลบแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "เขียนแอตทริบิวต์ที่มีอยู่ใหม่โดยบันทึกเฉพาะส่วนที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "แสดงรายการค่าของแอตทริบิวต์ทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "ดึงค่าแอตทริบิวต์เดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "สร้างค่าแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "ลบค่าของแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:179 +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 "" +"เขียนฟิลด์บางส่วนของค่าแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "แสดงรายการหมวดหมู่ทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "ดึงข้อมูลหมวดหมู่เดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "หมวดหมู่ UUID หรือ slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "สร้างหมวดหมู่" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "ลบหมวดหมู่" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "" +"เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของหมวดหมู่" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "แสดงรายการหมวดหมู่ทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"การค้นหาส่วนย่อยโดยไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่ใน 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" +msgstr "กรองคำสั่งซื้อที่มี buy_time >= วันที่และเวลาตามมาตรฐาน ISO 8601 นี้" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "กรองคำสั่งซื้อที่มี buy_time <= วันที่และเวลาตามมาตรฐาน ISO 8601 นี้" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "กรองตาม UUID ของคำสั่งซื้อที่ตรงกัน" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "กรองตามหมายเลขคำสั่งซื้อที่อ่านได้โดยมนุษย์อย่างถูกต้อง" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"กรองตามอีเมลของผู้ใช้ (ตรงตามตัวอักษรโดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "กรองตาม UUID ของผู้ใช้" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" +"เรียงลำดับโดยหนึ่งใน: 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)" +msgstr "ดึงข้อมูลหมวดหมู่เดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "ลำดับ UUID หรือรหัสที่มนุษย์อ่านได้" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "สร้างแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "ไม่สามารถใช้งานได้สำหรับผู้ใช้ที่ไม่ใช่พนักงาน" + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "ลบแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "เขียนหมวดหมู่ที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" + +#: engine/core/docs/drf/viewsets.py:382 +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` จะเริ่มการทำธุรกรรม" + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "ดึงคำสั่งซื้อที่รอดำเนินการปัจจุบันของผู้ใช้" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "ดึงคำสั่งซื้อที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "ซื้อสินค้าโดยไม่ต้องสร้างบัญชี" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "สรุปการสั่งซื้อสินค้าสำหรับผู้ใช้ที่ไม่ได้ลงทะเบียน" + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "เพิ่มสินค้าในคำสั่งซื้อ" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"เพิ่มสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "เพิ่มรายการสินค้าที่ต้องการสั่งซื้อ โดยจำนวนจะไม่ถูกนับ" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"เพิ่มรายการสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` " +"ที่ให้มา" + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "ลบสินค้าออกจากคำสั่งซื้อ" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"ลบผลิตภัณฑ์ออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "นำสินค้าออกจากคำสั่งซื้อ, จำนวนจะไม่ถูกนับ" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"ลบรายการสินค้าออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` " +"ที่ให้มา" + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "แสดงรายการคุณลักษณะทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"สำหรับผู้ใช้ที่ไม่ใช่บุคลากร " +"จะแสดงเฉพาะรายการที่อยู่ในรายการสิ่งที่ต้องการของตนเองเท่านั้น" + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "ดึงข้อมูลคุณลักษณะเดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "สร้างแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "ไม่สามารถใช้งานได้สำหรับผู้ใช้ที่ไม่ใช่พนักงาน" + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "ลบแอตทริบิวต์" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "เขียนแอตทริบิวต์ที่มีอยู่ใหม่โดยบันทึกเฉพาะส่วนที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ " +"โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "ดึงรายการสินค้าที่ผู้ใช้ต้องการซื้อที่ยังไม่ได้ซื้อในปัจจุบัน" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"ดึงรายการความปรารถนาที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "เพิ่มสินค้าในคำสั่งซื้อ" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "เพิ่มสินค้าไปยังรายการที่ต้องการโดยใช้ `product_uuid` ที่ให้มา" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "นำสินค้าออกจากรายการที่อยากได้" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "ลบผลิตภัณฑ์ออกจากรายการที่ต้องการโดยใช้ `product_uuid` ที่ให้มา" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "เพิ่มสินค้าหลายรายการลงในรายการที่ต้องการ" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"เพิ่มสินค้าหลายรายการลงในรายการสินค้าที่ต้องการโดยใช้ `product_uuids` " +"ที่ให้มา" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "ลบสินค้าออกจากคำสั่งซื้อ" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `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" +"• **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" +"`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`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "รายการสินค้าทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "(exact) รหัส UUID ของผลิตภัณฑ์" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "ดึงข้อมูลสินค้าเพียงรายการเดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "สร้างผลิตภัณฑ์" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "" +"อัปเดตบางฟิลด์ของสินค้าที่มีอยู่แล้ว โดยคงฟิลด์ที่ไม่สามารถแก้ไขได้ไว้" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "ลบผลิตภัณฑ์" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "แสดงรายการข้อเสนอแนะที่ได้รับอนุญาตทั้งหมดสำหรับผลิตภัณฑ์" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของผลิตภัณฑ์" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "รายการที่อยู่ทั้งหมด" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "ดึงที่อยู่เดียว" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "สร้างที่อยู่ใหม่" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "ลบที่อยู่" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "อัปเดตที่อยู่ทั้งหมด" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "อัปเดตที่อยู่บางส่วน" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "การเติมที่อยู่โดยอัตโนมัติ" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "ข้อมูลดิบสำหรับคำค้นหา กรุณาเพิ่มข้อมูลจากจุดสิ้นสุด geo-IP" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "จำกัดจำนวนผลลัพธ์, 1 < limit < 10, ค่าเริ่มต้น: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "แสดงความคิดเห็นทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "ดึงข้อมูลความคิดเห็นหนึ่งรายการ (มุมมองแบบละเอียด)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "สร้างข้อเสนอแนะ" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "ลบความคิดเห็น" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "เขียนใหม่ข้อเสนอแนะที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "แสดงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "" +"ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว " +"(มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "สร้างความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ใหม่" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "แทนที่ความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "อัปเดตบางส่วนของความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "ลบความสัมพันธ์ระหว่างคำสั่งซื้อและสินค้า" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "" +"เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "แสดงรายการทั้งหมดของแบรนด์ (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "ดึงข้อมูลแบรนด์เดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "แบรนด์ UUID หรือ slug" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "สร้างแบรนด์" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "ลบแบรนด์" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "เขียนใหม่แบรนด์ที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"เขียนข้อมูลในบางช่องของแบรนด์ที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "แสดงรายชื่อผู้จำหน่ายทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "ดึงข้อมูลผู้ขายรายเดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "สร้างผู้ขาย" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "ลบผู้ขาย" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "เขียนใหม่ผู้ขายที่มีอยู่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"เขียนข้อมูลในบางช่องของซัพพลายเออร์ที่มีอยู่แล้วใหม่ " +"โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "แสดงภาพสินค้าทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "ดึงภาพสินค้าเพียงหนึ่งรายการ (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "สร้างภาพสินค้า" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "ลบรูปภาพสินค้า" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "เขียนภาพสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"เขียนข้อมูลบางส่วนของภาพสินค้าที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "แสดงรายการรหัสโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "ดึงรหัสโปรโมชั่นเพียงหนึ่งรายการ (มุมมองแบบละเอียด)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "สร้างรหัสโปรโมชั่น" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "ลบโค้ดโปรโมชั่น" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "เขียนโค้ดโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"เขียนฟิลด์บางส่วนของรหัสโปรโมชั่นที่มีอยู่ใหม่ " +"โดยคงค่าที่ไม่สามารถแก้ไขได้ไว้" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "รายการโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "ดึงข้อมูลโปรโมชั่นเดียว (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "สร้างโปรโมชั่น" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "ลบโปรโมชั่น" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "เขียนโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"เขียนข้อมูลบางส่วนของโปรโมชั่นที่มีอยู่ใหม่ " +"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "แสดงรายการหุ้นทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "ดึงข้อมูลสินค้าคงคลังหนึ่งรายการ (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "สร้างบันทึกสินค้าคงคลัง" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "ลบข้อมูลสินค้าคงคลัง" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "เขียนบันทึกสต็อกที่มีอยู่ใหม่โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"เขียนฟิลด์บางส่วนของบันทึกสต็อกที่มีอยู่ใหม่ " +"โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "แสดงแท็กสินค้าทั้งหมด (มุมมองแบบง่าย)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "ดึงแท็กสินค้าหนึ่งรายการ (มุมมองรายละเอียด)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "สร้างแท็กสินค้า" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "ลบแท็กสินค้า" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "เขียนแท็กสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"เขียนข้อมูลบางส่วนของแท็กสินค้าที่มีอยู่แล้วใหม่ " +"โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "ไม่พบคำค้นหา" + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "ค้นหา" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "ยูไอไอดี" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "ชื่อ" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "หมวดหมู่" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "หมวดหมู่ slug" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "แท็ก" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "ราคาต่ำสุด" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "ราคาสูงสุด" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "กำลังใช้งานอยู่" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "แบรนด์" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "คุณลักษณะ" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "ปริมาณ" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "ทาก" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "คือ ดิจิทัล" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "รวมหมวดหมู่ย่อย" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "รวมสินค้าสั่งทำส่วนตัว" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "ต้องมี category_uuid เพื่อใช้แฟล็ก include_subcategories" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "ค้นหา (รหัส, ชื่อผลิตภัณฑ์ หรือหมายเลขชิ้นส่วน)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "ซื้อหลังจาก (รวมแล้ว)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "ซื้อมาก่อน (รวมแล้ว)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "อีเมลผู้ใช้" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "รหัสผู้ใช้ UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "สถานะ" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "รหัสที่มนุษย์อ่านได้" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "ผู้ปกครอง" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "หมวดหมู่ทั้งหมด (มีอย่างน้อย 1 ผลิตภัณฑ์หรือไม่)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "ระดับ" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "รหัส UUID ของผลิตภัณฑ์" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "กุญแจที่ต้องค้นหาหรือติดตั้งไว้ในแคช" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "ข้อมูลที่จะเก็บไว้ในแคช" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "เวลาหมดในวินาทีเพื่อตั้งค่าข้อมูลสำหรับเก็บในแคช" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "ข้อมูลที่เก็บไว้ในแคช" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "เพิ่มสินค้าในคำสั่งซื้อ" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "ลบสินค้าออกจากคำสั่งซื้อ" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "นำสินค้าทั้งหมดออกจากคำสั่งซื้อ" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "ซื้อคำสั่ง" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "ดำเนินการกับรายการสินค้าในลำดับ" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "ลบ/เพิ่ม" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "ดำเนินการกับรายการสินค้าในรายการสินค้าที่ต้องการ" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "กรุณาให้ค่า `wishlist_uuid`" + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "เพิ่มสินค้าในคำสั่งซื้อ" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "ลบสินค้าออกจากคำสั่งซื้อ" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "ลบสินค้าออกจากคำสั่งซื้อ" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "ลบสินค้าออกจากคำสั่งซื้อ" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "ซื้อคำสั่ง" + +#: 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" + +#: engine/core/graphene/mutations.py:549 +msgid "add or delete a feedback for orderproduct" +msgstr "เพิ่มหรือลบความคิดเห็นสำหรับสินค้าที่สั่งซื้อ" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "การกระทำต้องเป็น `add` หรือ `remove` เท่านั้น!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} ไม่พบ: {uuid}!" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "ต้องอยู่ระหว่าง 1 ถึง 10" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม" + +#: 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:95 +msgid "grouped attributes" +msgstr "กลุ่มคุณสมบัติ" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "กลุ่มของลักษณะ" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "แบรนด์" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "หมวดหมู่" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "คุณลักษณะและคุณค่าใดที่สามารถใช้สำหรับกรองหมวดหมู่นี้ได้" + +#: 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:205 +msgid "tags for this category" +msgstr "แท็กสำหรับหมวดหมู่นี้" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "สินค้าในหมวดหมู่" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "ผู้ขาย" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "ละติจูด (พิกัด Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "ลองจิจูด (พิกัด X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "อย่างไร" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "แสดงความคิดเห็นจากผู้ใช้" + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "ข้อเสนอแนะ" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" + +#: 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:414 +msgid "total price of this order" +msgstr "ราคาทั้งหมดของคำสั่งซื้อนี้" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "จำนวนรวมของผลิตภัณฑ์ในคำสั่งซื้อ" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "สินค้าทั้งหมดในคำสั่งซื้อนี้เป็นสินค้าดิจิทัลหรือไม่" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "คำสั่ง" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL ของรูปภาพ" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "รูปภาพของสินค้า" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "ข้อเสนอแนะ" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "กลุ่มคุณลักษณะ" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "ราคา" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "ปริมาณ" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "จำนวนความคิดเห็น" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "ราคาลดพิเศษ" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "ผลิตภัณฑ์" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "รหัสส่งเสริมการขาย" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "สินค้าลดราคา" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "โปรโมชั่น" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "ผู้ขาย" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "สินค้า" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "สินค้าที่อยู่ในรายการต้องการ" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "รายการสิ่งที่ต้องการ" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "สินค้าที่ติดแท็ก" + +#: 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:665 +msgid "tagged categories" +msgstr "หมวดหมู่ที่ถูกติดแท็ก" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "หมวดหมู่' แท็ก" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "ชื่อโครงการ" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "ชื่อบริษัท" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "ที่อยู่บริษัท" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "หมายเลขโทรศัพท์บริษัท" + +#: 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:681 +msgid "email host user" +msgstr "ผู้ใช้โฮสต์อีเมล" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "จำนวนเงินสูงสุดสำหรับการชำระเงิน" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "จำนวนเงินขั้นต่ำสำหรับการชำระเงิน" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "ข้อมูลการวิเคราะห์" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "ข้อมูลโฆษณา" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "การกำหนดค่า" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "รหัสภาษา" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "ชื่อภาษา" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "ธงภาษา, หากมีอยู่ :)" + +#: 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 +msgid "products search results" +msgstr "ผลการค้นหาสินค้า" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "ผลการค้นหาสินค้า" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"แทนกลุ่มของแอตทริบิวต์ ซึ่งสามารถมีลำดับชั้นได้ " +"คลาสนี้ใช้เพื่อจัดการและจัดระเบียบกลุ่มแอตทริบิวต์ " +"กลุ่มแอตทริบิวต์สามารถมีกลุ่มแม่ได้ ทำให้เกิดโครงสร้างลำดับชั้น " +"ซึ่งสามารถมีประโยชน์ในการจัดหมวดหมู่และจัดการแอตทริบิวต์ได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่ซับซ้อน" + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "ผู้ปกครองของกลุ่มนี้" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "กลุ่มแอตทริบิวต์ของพ่อแม่" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "ชื่อกลุ่มคุณสมบัติ" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "กลุ่มคุณลักษณะ" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"แทนหน่วยงานผู้ขายที่สามารถจัดเก็บข้อมูลเกี่ยวกับผู้ขายภายนอกและข้อกำหนดในการโต้ตอบของพวกเขาได้" +" คลาสผู้ขายถูกใช้เพื่อกำหนดและจัดการข้อมูลที่เกี่ยวข้องกับผู้ขายภายนอก " +"มันจัดเก็บชื่อผู้ขาย รายละเอียดการตรวจสอบสิทธิ์ที่จำเป็นสำหรับการสื่อสาร " +"และเปอร์เซ็นต์การเพิ่มราคาที่นำไปใช้กับสินค้าที่นำมาจากผู้ขาย " +"โมเดลนี้ยังรักษาข้อมูลเมตาเพิ่มเติมและข้อจำกัด " +"ทำให้เหมาะสำหรับการใช้งานในระบบที่มีการโต้ตอบกับผู้ขายภายนอก" + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "ข้อมูลการยืนยันตัวตน" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "กำหนดมาร์กอัปสำหรับสินค้าที่ดึงมาจากผู้ขายรายนี้" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "เปอร์เซ็นต์การบวกกำไรของผู้ขาย" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "ชื่อของผู้ขายนี้" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "ชื่อผู้ขาย" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "ไฟล์การตอบสนอง" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "การตอบกลับการประมวลผลครั้งสุดท้ายของผู้ขาย" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "เส้นทางไฟล์การรวมของผู้ขาย" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "เส้นทางการบูรณาการ" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"แทนแท็กผลิตภัณฑ์ที่ใช้ในการจัดประเภทหรือระบุผลิตภัณฑ์ คลาส ProductTag " +"ถูกออกแบบมาเพื่อระบุและจัดประเภทผลิตภัณฑ์อย่างเป็นเอกลักษณ์ผ่านการรวมกันของตัวระบุแท็กภายในและชื่อแสดงผลที่ใช้งานง่าย" +" รองรับการดำเนินการที่ส่งออกผ่าน mixins " +"และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ" + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "ตัวระบุแท็กภายในสำหรับแท็กสินค้า" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "ชื่อวัน" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "ชื่อที่เป็นมิตรกับผู้ใช้สำหรับแท็กสินค้า" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "แสดงชื่อแท็ก" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "แท็กสินค้า" + +#: engine/core/models.py:229 +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 "" +"แทนแท็กหมวดหมู่ที่ใช้สำหรับผลิตภัณฑ์ " +"คลาสนี้จำลองแท็กหมวดหมู่ที่สามารถใช้เพื่อเชื่อมโยงและจัดประเภทผลิตภัณฑ์ได้ " +"รวมถึงแอตทริบิวต์สำหรับตัวระบุแท็กภายในและชื่อแสดงผลที่เป็นมิตรกับผู้ใช้" + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "แท็กหมวดหมู่" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "แท็กหมวดหมู่" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"แทนถึงเอนทิตีประเภทเพื่อจัดระเบียบและจัดกลุ่มรายการที่เกี่ยวข้องในโครงสร้างลำดับชั้น" +" หมวดหมู่สามารถมีความสัมพันธ์ลำดับชั้นกับหมวดหมู่อื่น ๆ ได้ " +"ซึ่งสนับสนุนความสัมพันธ์แบบพ่อแม่-ลูกคลาสนี้ประกอบด้วยฟิลด์สำหรับข้อมูลเมตาและตัวแทนภาพ" +" ซึ่งทำหน้าที่เป็นพื้นฐานสำหรับคุณสมบัติที่เกี่ยวข้องกับหมวดหมู่ " +"คลาสนี้มักใช้เพื่อกำหนดและจัดการหมวดหมู่สินค้าหรือการจัดกลุ่มที่คล้ายกันภายในแอปพลิเคชัน" +" ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่" +" รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "อัปโหลดรูปภาพที่แสดงถึงหมวดหมู่นี้" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "ภาพหมวดหมู่" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "กำหนดเปอร์เซ็นต์มาร์กอัปสำหรับสินค้าในหมวดหมู่นี้" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "ผู้ปกครองของหมวดหมู่นี้เพื่อสร้างโครงสร้างลำดับชั้น" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "หมวดหมู่หลัก" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "ชื่อหมวดหมู่" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "กรุณาตั้งชื่อสำหรับหมวดหมู่นี้" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "เพิ่มคำอธิบายโดยละเอียดสำหรับหมวดหมู่นี้" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "หมวดหมู่คำอธิบาย" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "ลำดับความสำคัญ" + +#: engine/core/models.py:438 +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." +msgstr "" +"แทนวัตถุแบรนด์ในระบบ คลาสนี้จัดการข้อมูลและคุณลักษณะที่เกี่ยวข้องกับแบรนด์ " +"รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " +"ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "ชื่อของแบรนด์นี้" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "ชื่อแบรนด์" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "แบรนด์รูปภาพขนาดเล็ก" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "แบรนด์ภาพใหญ่" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "คำอธิบายแบรนด์" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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), และสินทรัพย์ดิจิทัล " +"เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" +" ได้" + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "ผู้ขายที่เกี่ยวข้อง" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "ราคาขาย" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "ราคาซื้อจากผู้ขาย" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "จำนวนสินค้าที่มีในสต็อก" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "จำนวนในสต็อก" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "รหัสสินค้าของผู้ขาย" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "ไฟล์ดิจิทัล" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "คุณลักษณะของระบบ" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "รายการสินค้าคงคลัง" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"แสดงถึงผลิตภัณฑ์ที่มีคุณลักษณะต่างๆ เช่น หมวดหมู่, แบรนด์, แท็ก, " +"สถานะดิจิทัล, ชื่อ, คำอธิบาย, หมายเลขชิ้นส่วน, และ slug " +"ให้คุณสมบัติประโยชน์ที่เกี่ยวข้องเพื่อดึงคะแนน, จำนวนความคิดเห็น, ราคา, " +"จำนวนสินค้า, และยอดสั่งซื้อทั้งหมด " +"ออกแบบมาเพื่อใช้ในระบบที่จัดการอีคอมเมิร์ซหรือการจัดการสินค้าคงคลัง " +"คลาสนี้โต้ตอบกับโมเดลที่เกี่ยวข้อง (เช่น หมวดหมู่, แบรนด์, และแท็กผลิตภัณฑ์)" +" " +"และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "สินค้าเป็นดิจิทัล" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "ชื่อสินค้า" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "รายละเอียดสินค้า" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "หมายเลขชิ้นส่วน" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"แทนคุณสมบัติในระบบ. คลาสนี้ใช้เพื่อกำหนดและจัดการคุณสมบัติ " +"ซึ่งเป็นข้อมูลที่สามารถปรับแต่งได้ซึ่งสามารถเชื่อมโยงกับเอนทิตีอื่น ๆ ได้. " +"คุณสมบัติมีหมวดหมู่, กลุ่ม, ประเภทค่า, และชื่อที่เกี่ยวข้อง. " +"แบบจำลองรองรับหลายประเภทของค่า รวมถึงสตริง, จำนวนเต็ม, จำนวนทศนิยม, บูลีน, " +"อาร์เรย์, และออบเจ็กต์. " +"ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "กลุ่มของแอตทริบิวต์นี้" + +#: engine/core/models.py:739 +msgid "string" +msgstr "สตริง" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "ความซื่อสัตย์" + +#: engine/core/models.py:741 +msgid "float" +msgstr "ลอย" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "บูลีน" + +#: engine/core/models.py:743 +msgid "array" +msgstr "อาร์เรย์" + +#: engine/core/models.py:744 +msgid "object" +msgstr "วัตถุ" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "ประเภทของค่าของแอตทริบิวต์" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "ประเภทของค่า" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "ชื่อของแอตทริบิวต์นี้" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "ชื่อของแอตทริบิวต์" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "สามารถกรองได้" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "" +"แทนค่าเฉพาะสำหรับคุณลักษณะที่เชื่อมโยงกับผลิตภัณฑ์ มันเชื่อมโยง 'คุณลักษณะ' " +"กับ 'ค่า' ที่ไม่ซ้ำกัน " +"ทำให้การจัดระเบียบและการแสดงลักษณะของผลิตภัณฑ์เป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น" + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "คุณลักษณะของค่านี้" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "ผลิตภัณฑ์เฉพาะที่เกี่ยวข้องกับค่าของแอตทริบิวต์นี้" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "ให้ข้อความทางเลือกสำหรับภาพเพื่อการเข้าถึง" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "ข้อความแสดงแทนภาพ" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "รูปภาพสินค้า" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "กำหนดลำดับการแสดงผลของภาพ" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "ลำดับความสำคัญในการแสดงผล" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "สินค้าที่ภาพนี้แทน" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "รูปภาพสินค้า" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"แสดงถึงแคมเปญส่งเสริมการขายสำหรับสินค้าที่มีส่วนลด. " +"คลาสนี้ใช้เพื่อกำหนดและจัดการแคมเปญส่งเสริมการขายที่มอบส่วนลดเป็นเปอร์เซ็นต์สำหรับสินค้า." +" คลาสนี้ประกอบด้วยคุณสมบัติสำหรับการตั้งค่าอัตราส่วนลด, " +"ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " +"คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "เปอร์เซ็นต์ส่วนลด" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "ชื่อโปรโมชั่น" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "รายละเอียดโปรโมชั่น" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "สินค้าที่รวมอยู่" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "โปรโมชั่น" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"แสดงรายการสินค้าที่ผู้ใช้ต้องการเก็บไว้เพื่อจัดการและค้นหาสินค้าที่ต้องการในอนาคต" +" คลาสนี้ให้บริการฟังก์ชันสำหรับการจัดการคอลเลกชันของสินค้า " +"ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " +"ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "เจ้าของรายการที่อยากได้" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "รายการสิ่งที่ต้องการ" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"แทนเอกสารบันทึกที่เกี่ยวข้องกับผลิตภัณฑ์. " +"คลาสนี้ใช้เพื่อเก็บข้อมูลเกี่ยวกับเอกสารที่เกี่ยวข้องกับผลิตภัณฑ์เฉพาะ " +"รวมถึงการอัปโหลดไฟล์และข้อมูลเมตาของไฟล์. " +"คลาสนี้มีเมธอดและคุณสมบัติเพื่อจัดการกับประเภทไฟล์และเส้นทางจัดเก็บสำหรับไฟล์เอกสาร." +" คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " +"และให้คุณสมบัติเพิ่มเติมตามความต้องการ." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "สารคดี" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "สารคดี" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"แทนที่หน่วยงานที่อยู่ซึ่งรวมถึงรายละเอียดตำแหน่งและความสัมพันธ์กับผู้ใช้ " +"ให้ฟังก์ชันสำหรับการจัดเก็บข้อมูลทางภูมิศาสตร์และที่อยู่ " +"รวมถึงการผสานรวมกับบริการการเข้ารหัสทางภูมิศาสตร์ " +"คลาสนี้ถูกออกแบบมาเพื่อจัดเก็บข้อมูลที่อยู่โดยละเอียด รวมถึงองค์ประกอบเช่น " +"ถนน เมือง ภูมิภาค ประเทศ และตำแหน่งทางภูมิศาสตร์ (ลองจิจูดและละติจูด) " +"รองรับการผสานรวมกับ API การเข้ารหัสทางภูมิศาสตร์ " +"ทำให้สามารถจัดเก็บการตอบสนองของ API " +"ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" +" ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "ที่อยู่สำหรับลูกค้า" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "บรรทัดที่อยู่" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "ถนน" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "เขต" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "เมือง" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "ภูมิภาค" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "รหัสไปรษณีย์" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "ประเทศ" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "ที่อยู่" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "ที่อยู่" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"แสดงรหัสโปรโมชั่นที่สามารถใช้เพื่อรับส่วนลด การจัดการความถูกต้อง " +"ประเภทของส่วนลด และการใช้งาน คลาส PromoCode " +"จัดเก็บรายละเอียดเกี่ยวกับรหัสโปรโมชั่น รวมถึงตัวระบุที่ไม่ซ้ำกัน " +"คุณสมบัติของส่วนลด (จำนวนหรือเปอร์เซ็นต์) ระยะเวลาการใช้งาน " +"ผู้ใช้ที่เกี่ยวข้อง (ถ้ามี) และสถานะการใช้งาน " +"รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" +" ได้รับการปฏิบัติตาม" + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "รหัสโปรโมชั่น" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "จำนวนส่วนลดคงที่" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "เปอร์เซ็นต์ส่วนลด" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "เวลาสิ้นสุดความถูกต้อง" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "เวลาเริ่มต้นความถูกต้อง" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "เวลาการใช้งาน" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "ผู้ใช้ที่ได้รับมอบหมาย" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "รหัสโปรโมชั่น" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "รหัสส่งเสริมการขาย" + +#: engine/core/models.py:1150 +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" +msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "ใช้รหัสโปรโมชั่น" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "ที่อยู่สำหรับจัดส่ง" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "สถานะการสั่งซื้อ" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI " +"ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "ผู้ใช้ที่ทำการสั่งซื้อ" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "ผู้ใช้" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "ซื้อเวลา" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "คำสั่ง" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "" +"ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "" +"คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "รหัสโปรโมชั่นไม่มีอยู่" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "ไม่มีที่อยู่" + +#: 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 "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที" + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "ค่าแรงบังคับไม่ถูกต้อง" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์" + +#: engine/core/models.py:1575 +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}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" + +#: engine/core/models.py:1719 +msgid "" +"references the specific product in an order that this feedback is about" +msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "สินค้าที่เกี่ยวข้อง" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "การให้คะแนนสินค้า" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"แสดงผลิตภัณฑ์ที่เกี่ยวข้องกับคำสั่งซื้อและคุณลักษณะของผลิตภัณฑ์โมเดล " +"OrderProduct ดูแลข้อมูลเกี่ยวกับสินค้าที่เป็นส่วนหนึ่งของคำสั่งซื้อ " +"รวมถึงรายละเอียดเช่น ราคาซื้อ จำนวน คุณสมบัติของสินค้า และสถานะ " +"โมเดลนี้จัดการการแจ้งเตือนสำหรับผู้ใช้และผู้ดูแลระบบ " +"และจัดการการดำเนินการเช่น การคืนสินค้าคงเหลือหรือการเพิ่มความคิดเห็น " +"โมเดลนี้ยังมีวิธีการและคุณสมบัติที่สนับสนุนตรรกะทางธุรกิจ เช่น " +"การคำนวณราคารวมหรือการสร้าง URL สำหรับดาวน์โหลดสินค้าดิจิทัล " +"โมเดลนี้ผสานรวมกับโมเดล Order และ Product " +"และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "ความคิดเห็นภายใน" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "การแจ้งเตือนผู้ใช้" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "จัดเรียงคุณลักษณะของสินค้า" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "ลำดับของผู้ปกครอง" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "จำนวนสินค้า" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "สถานะสายผลิตภัณฑ์" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "ชื่อ" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "URL ของการผสานรวม" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "ลิงก์ CRM ของคำสั่ง" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "ลิงก์ CRM ของคำสั่งซื้อ" + +#: engine/core/models.py:1947 +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." +msgstr "" +"แสดงถึงฟังก์ชันการดาวน์โหลดสำหรับสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ " +"คลาส DigitalAssetDownload " +"ให้ความสามารถในการจัดการและเข้าถึงการดาวน์โหลดที่เกี่ยวข้องกับผลิตภัณฑ์ในคำสั่งซื้อ" +" มันเก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ในคำสั่งซื้อที่เกี่ยวข้อง จำนวนการดาวน์โหลด " +"และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " +"สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" + +#: engine/core/models.py:1961 +msgid "download" +msgstr "ดาวน์โหลด" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "ดาวน์โหลด" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ" + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "หน้าแรก" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "ติดต่อเรา" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "เกี่ยวกับเรา" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "ลูกค้าผสม (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "ลูกค้าใหม่" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "ลูกค้าที่กลับมาใช้บริการ" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "ไม่มีกิจกรรมของลูกค้าใน 30 วันที่ผ่านมา" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "ยอดขายรายวัน" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "คำสั่งซื้อ (เสร็จสิ้น)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "รายได้รวม" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "คำสั่ง" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "กรอส" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "แดชบอร์ด" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "ภาพรวมรายได้" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "รายได้สุทธิ" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "ภาษี" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "การคืนสินค้า" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "รายได้รวม" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "ไม่มีวันที่" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "รายได้สุทธิ" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "อัตราการคืนเงิน" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "ส่งคืน" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "สินค้าใกล้หมด" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "ไม่มีสินค้าคงคลังต่ำ" + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "สินค้าที่ส่งคืนส่วนใหญ่ (30 วัน)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "ไม่มีการคืนสินค้าในช่วง 30 วันที่ผ่านมา" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "สินค้าที่ลูกค้าต้องการมากที่สุด" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "ยังไม่มีข้อมูล" + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "สินค้าที่ได้รับความนิยมมากที่สุด" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "ลิงก์ด่วน" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "ไม่มีลิงก์ให้ใช้" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "จัดส่งทางไปรษณีย์ vs ดิจิทัล (30 วัน)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "ดิจิทัล" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "จัดส่งแล้ว" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "หมวดหมู่ยอดนิยมตามปริมาณ (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "ไม่มีการขายในหมวดหมู่ใดในช่วง 30 วันที่ผ่านมา" + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "ผู้ดูแลระบบเว็บไซต์ Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "การยืนยันคำสั่งซื้อ" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "โลโก้" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "สวัสดีครับ/ค่ะ %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"ขอบคุณสำหรับคำสั่งซื้อของคุณ #%(order.pk)s! " +"เราขอแจ้งให้คุณทราบว่าเราได้ดำเนินการตามคำสั่งซื้อของคุณแล้ว " +"รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "รวม" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "ราคาทั้งหมด" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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" + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "ขอแสดงความนับถือ
ทีมงาน %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "สงวนลิขสิทธิ์" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "คำสั่งซื้อจัดส่งแล้ว" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "สวัสดีครับ/ค่ะ %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"เราได้ดำเนินการคำสั่งซื้อของคุณหมายเลข %(order_uuid)s สำเร็จแล้ว! " +"รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "ข้อมูลเพิ่มเติม" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "มูลค่า" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ %(contact_email)s" + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "คีย์" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "เพิ่มแถว" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "รหัสส่งเสริมการขายได้รับแล้ว" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +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" +" the details of your order:" +msgstr "" +"ขอบคุณสำหรับการสั่งซื้อของคุณ! เราขอแจ้งยืนยันการสั่งซื้อของคุณเรียบร้อยแล้ว" +" รายละเอียดการสั่งซื้อของคุณมีดังนี้:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "ราคาค่าจัดส่ง" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "คำสั่งซื้อของคุณจะถูกจัดส่งไปยังที่อยู่ต่อไปนี้:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "ขอแสดงความนับถือ
ทีมงาน %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "สงวนลิขสิทธิ์" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "จำเป็นต้องมีทั้งข้อมูลและเวลาหมดอายุ" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME} | ติดต่อเรา เริ่มต้น" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | ยืนยันการสั่งซื้อ" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | จัดส่งเรียบร้อย" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "คุณไม่มีสิทธิ์ดำเนินการนี้" + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "ต้องกำหนดค่าพารามิเตอร์ NOMINATIM_URL!" + +#: engine/core/validators.py:19 +#, 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} พิกเซล!" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "ส่งคืนรายการของภาษาที่รองรับและข้อมูลที่เกี่ยวข้อง" + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "ส่งคืนพารามิเตอร์ของเว็บไซต์ในรูปแบบอ็อบเจ็กต์ JSON" + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"จัดการการดำเนินการแคช เช่น " +"การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "จัดการการส่งแบบฟอร์ม 'ติดต่อเรา'" + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST " +"ที่เข้ามา" + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "จัดการคำค้นหาทั่วโลก" + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน" + +#: engine/core/views.py:332 +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." +msgstr "" +"จัดการการดาวน์โหลดสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ " +"ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" +" หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid เป็นข้อมูลที่จำเป็น" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "คำสั่งซื้อสินค้าไม่มีอยู่" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "สินค้าตามคำสั่งซื้อไม่มีสินค้า" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "ไม่พบไอคอนเว็บไซต์" + +#: engine/core/views.py:404 +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." +msgstr "" +"จัดการคำขอสำหรับไอคอนเว็บไซต์ (favicon) ฟังก์ชันนี้พยายามให้บริการไฟล์ " +"favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " +"จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" + +#: engine/core/views.py:416 +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 "" +"เปลี่ยนเส้นทางคำขอไปยังหน้าดัชนีของผู้ดูแลระบบ ฟังก์ชันนี้จัดการคำขอ HTTP " +"ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " +"โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "ส่งคืนเวอร์ชันปัจจุบันของ eVibes" + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "รายได้และคำสั่งซื้อ (ล่าสุด %(days)d)" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "ส่งคืนตัวแปรที่กำหนดเองสำหรับแดชบอร์ด" + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"กำหนดชุดมุมมองสำหรับการจัดการการดำเนินการที่เกี่ยวข้องกับ Evibes คลาส " +"EvibesViewSet สืบทอดมาจาก ModelViewSet " +"และให้ฟังก์ชันการทำงานสำหรับการจัดการการกระทำและการดำเนินการบนเอนทิตีของ " +"Evibes รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน " +"การอนุญาตที่ปรับแต่งได้ และรูปแบบการแสดงผล" + +#: 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." +msgstr "" +"แสดงชุดมุมมองสำหรับการจัดการวัตถุ AttributeGroup ดำเนินการที่เกี่ยวข้องกับ " +"AttributeGroup รวมถึงการกรอง การแปลงข้อมูลเป็นรูปแบบที่ส่งผ่านได้ " +"และการดึงข้อมูล คลาสนี้เป็นส่วนหนึ่งของชั้น API " +"ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล" +" AttributeGroup" + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุ Attribute ภายในแอปพลิเคชัน " +"ให้ชุดของจุดสิ้นสุด API สำหรับการโต้ตอบกับข้อมูล Attribute " +"คลาสนี้จัดการการค้นหา การกรอง และการแปลงวัตถุ Attribute เป็นรูปแบบที่อ่านได้" +" ช่วยให้สามารถควบคุมข้อมูลที่ส่งคืนได้อย่างยืดหยุ่น เช่น " +"การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ " +"ขึ้นอยู่กับความต้องการของคำขอ" + +#: 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." +msgstr "" +"ชุดมุมมองสำหรับการจัดการวัตถุ AttributeValue " +"ชุดมุมมองนี้ให้ฟังก์ชันการทำงานสำหรับการแสดงรายการ การดึงข้อมูล การสร้าง " +"การอัปเดต และการลบวัตถุ AttributeValue มันผสานรวมกับกลไกชุดมุมมองของ Django " +"REST Framework และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ " +"ความสามารถในการกรองข้อมูลมีให้ผ่าน DjangoFilterBackend" + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"จัดการมุมมองสำหรับการดำเนินการที่เกี่ยวข้องกับหมวดหมู่ คลาส CategoryViewSet " +"รับผิดชอบในการจัดการการดำเนินการที่เกี่ยวข้องกับโมเดลหมวดหมู่ในระบบ " +"มันรองรับการดึงข้อมูล การกรอง และการแปลงข้อมูลหมวดหมู่เป็นรูปแบบที่ส่งต่อได้" +" " +"ชุดมุมมองนี้ยังบังคับใช้สิทธิ์การเข้าถึงเพื่อให้แน่ใจว่าเฉพาะผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงข้อมูลเฉพาะได้" + +#: 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 " +"สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น" + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"จัดการการดำเนินงานที่เกี่ยวข้องกับโมเดล `Product` ในระบบ " +"คลาสนี้ให้ชุดมุมมองสำหรับการจัดการผลิตภัณฑ์ รวมถึงการกรอง การแปลงเป็นลำดับ " +"และปฏิบัติการบนอินสแตนซ์เฉพาะ มันขยายจาก `EvibesViewSet` " +"เพื่อใช้ฟังก์ชันทั่วไปและผสานรวมกับเฟรมเวิร์ก Django REST สำหรับการดำเนินการ" +" API แบบ RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ " +"และการเข้าถึงข้อเสนอแนะที่เกี่ยวข้องของผลิตภัณฑ์" + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"แสดงชุดมุมมองสำหรับการจัดการวัตถุ Vendor ชุดมุมมองนี้อนุญาตให้ดึงข้อมูล กรอง" +" และแปลงข้อมูล Vendor เป็นรูปแบบที่อ่านได้ ชุดมุมมองนี้กำหนด queryset " +"การกำหนดค่าตัวกรอง และคลาส serializer ที่ใช้จัดการการดำเนินการต่างๆ " +"วัตถุประสงค์ของคลาสนี้คือการให้การเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Vendor " +"อย่างมีประสิทธิภาพผ่านกรอบงาน Django REST" + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"การแสดงชุดมุมมองที่จัดการวัตถุข้อเสนอแนะ " +"คลาสนี้จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุข้อเสนอแนะ รวมถึงการแสดงรายการ" +" การกรอง และการดึงรายละเอียด " +"วัตถุประสงค์ของชุดมุมมองนี้คือการจัดเตรียมตัวแปลงอนุกรมที่แตกต่างกันสำหรับการดำเนินการต่างๆ" +" และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " +"`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet สำหรับการจัดการคำสั่งซื้อและกิจกรรมที่เกี่ยวข้อง " +"คลาสนี้ให้ฟังก์ชันการทำงานในการดึงข้อมูล แก้ไข และจัดการอ็อบเจ็กต์คำสั่งซื้อ" +" รวมถึงจุดสิ้นสุดต่างๆ สำหรับการจัดการคำสั่งซื้อ เช่น " +"การเพิ่มหรือลบผลิตภัณฑ์ " +"การดำเนินการซื้อสำหรับผู้ใช้ที่ลงทะเบียนและไม่ได้ลงทะเบียน " +"และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " +"ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"ให้ชุดมุมมองสำหรับการจัดการเอนทิตี OrderProduct " +"ชุดมุมมองนี้ช่วยให้สามารถดำเนินการ CRUD และดำเนินการเฉพาะที่เกี่ยวกับโมเดล " +"OrderProduct รวมถึงการกรอง การตรวจสอบสิทธิ์ " +"และการสลับตัวแปลงตามการดำเนินการที่ร้องขอ " +"นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" +" OrderProduct" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" + +#: 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:914 +msgid "Represents a view set for managing promotions. " +msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" + +#: 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 " +"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 นี้อำนวยความสะดวกในการทำงาน เช่น การเพิ่ม การลบ " +"และการดำเนินการแบบกลุ่มสำหรับผลิตภัณฑ์ในรายการที่ต้องการ " +"มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" +" เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"คลาสนี้ให้ฟังก์ชันการทำงานของ viewset สำหรับจัดการออบเจ็กต์ `Address` คลาส " +"AddressViewSet ช่วยให้สามารถดำเนินการ CRUD การกรอง " +"และการดำเนินการที่กำหนดเองที่เกี่ยวข้องกับเอนทิตีที่อยู่ " +"รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " +"และการจัดการสิทธิ์ตามบริบทของคำขอ" + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"จัดการการดำเนินการที่เกี่ยวข้องกับแท็กสินค้าภายในแอปพลิเคชัน " +"คลาสนี้ให้ฟังก์ชันการทำงานสำหรับการดึงข้อมูล การกรอง " +"และการแปลงออบเจ็กต์แท็กสินค้าเป็นรูปแบบที่ส่งต่อได้ " +"รองรับการกรองที่ยืดหยุ่นบนคุณสมบัติเฉพาะโดยใช้แบ็กเอนด์ตัวกรองที่กำหนดไว้ " +"และใช้ตัวแปลงรูปแบบที่แตกต่างกันโดยอัตโนมัติตามการดำเนินการที่กำลังดำเนินการอยู่" diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.mo b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..946c8d51 Binary files /dev/null and b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.po b/engine/core/locale/tr_TR/LC_MESSAGES/django.po new file mode 100644 index 00000000..a526655b --- /dev/null +++ b/engine/core/locale/tr_TR/LC_MESSAGES/django.po @@ -0,0 +1,3492 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: tr-tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "Benzersiz Kimlik" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"Benzersiz kimlik, herhangi bir veritabanı nesnesini kesin olarak tanımlamak " +"için kullanılır" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "Aktif mi" + +#: engine/core/abstract.py:21 +msgid "" +"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" + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Oluşturuldu" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Nesne veritabanında ilk kez göründüğünde" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Değiştirilmiş" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "Nesne en son ne zaman düzenlendi" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "Çeviriler" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Genel" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "İlişkiler" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "EK BİLGİ" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Metadata" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Zaman Damgaları" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Seçilen öğeler etkinleştirildi!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Seçilen öğeler devre dışı bırakıldı!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "Öznitelik Değerleri" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "Resim" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Görüntüler" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Stok" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Stoklar" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "Ürün Siparişi" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Çocuklar" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Konfigürasyon" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Çekirdek" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Bitti" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Teslimat" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Teslim edildi" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "İptal edildi" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Başarısız" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Beklemede" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Kabul Edildi" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "İade Edilen Para" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Ödeme" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Başarılı" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Seçilen dilde seçilen formatta OpenAPI şeması" + +#: engine/core/docs/drf/views.py:33 +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 "" +"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:37 +msgid "cache I/O" +msgstr "Önbellek I/O" + +#: engine/core/docs/drf/views.py:46 +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." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Desteklenen dillerin bir listesini alın" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Uygulamanın açığa çıkarılabilir parametrelerini alın" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "CORS'lu bir URL isteyin. Yalnızca https'ye izin verilir." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +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ı" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "İşletme olarak bir sipariş satın alın" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "" +"Sağlanan `products` ile `product_uuid` ve `attributes` öğelerini kullanarak " +"bir siparişi işletme olarak satın alın." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "satın alınan dijital siparişten bir dijital varlık indirme" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Tüm öznitelik gruplarını listeleme (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Tek bir öznitelik grubunu alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Öznitelik grubu oluşturma" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Öznitelik grubunu silme" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +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" +msgstr "" +"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)" +msgstr "Tüm öznitelikleri listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Tek bir özniteliği alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Öznitelik oluşturma" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Bir özniteliği silme" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir niteliği yeniden yazma" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Mevcut bir özniteliğin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "Tüm öznitelik değerlerini listeleme (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Tek bir öznitelik değerini alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Öznitelik değeri oluşturma" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Öznitelik değerini silme" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +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" +msgstr "" +"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)" +msgstr "Tüm kategorileri listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Tek bir kategoriyi alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Kategori UUID'si veya slug" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Bir kategori oluşturun" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Kategori silme" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir kategoriyi yeniden yazın" + +#: 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 "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: 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: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ü" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Kategorinin SEO meta verilerinin anlık görüntüsünü döndürür" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Tüm kategorileri listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Personel olmayan kullanıcılar için sadece kendi siparişleri iade edilir." + +#: 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" +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ı" + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Buy_time >= this ISO 8601 datetime içeren siparişleri filtreleyin" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Buy_time <= this ISO 8601 datetime ile siparişleri filtreleyin" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Tam sipariş UUID'sine göre filtreleme" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "" +"Tam olarak insan tarafından okunabilir sipariş kimliğine göre filtreleme" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Kullanıcının e-postasına göre filtreleme (büyük/küçük harfe duyarlı olmayan " +"tam eşleşme)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +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)" + +#: 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')." +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 " +"(örn. '-buy_time')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Tek bir kategoriyi alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Sipariş UUID'si veya insan tarafından okunabilir kimlik" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Öznitelik oluşturma" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Personel olmayan kullanıcılar için çalışmaz." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Bir özniteliği silme" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir kategoriyi yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Sipariş anındaki satın alma fiyatı" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"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 +msgid "retrieve current pending order of a user" +msgstr "Bir kullanıcının mevcut bekleyen siparişini al" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "hesap oluşturmadan sipariş satın alma" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "Kayıtlı olmayan bir kullanıcı için sipariş alımını sonuçlandırır." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Siparişe ürün ekleme" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Verilen `product_uuid` ve `attributes` öğelerini kullanarak siparişe bir " +"ürün ekler." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "" +"Sipariş edilecek ürünlerin bir listesini ekleyin, miktarlar sayılmayacaktır" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir siparişe " +"ürün listesi ekler." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Siparişten bir ürünü kaldırma" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir ürünü " +"siparişten kaldırır." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Siparişten bir ürünü kaldırın, miktarlar sayılmayacaktır" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir siparişten " +"ürün listesini kaldırır." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +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." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Tek bir özniteliği alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Öznitelik oluşturma" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Personel olmayan kullanıcılar için çalışmaz." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Bir özniteliği silme" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir niteliği yeniden yazma" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Mevcut bir özniteliğin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "bir kullanıcının mevcut bekleyen istek listesini al" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"kimliği doğrulanmış bir kullanıcının geçerli bekleyen istek listesini alır" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Siparişe ürün ekleme" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Sağlanan `product_uuid` öğesini kullanarak bir ürünü istek listesine ekler" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "İstek listesinden bir ürünü kaldırma" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Sağlanan `product_uuid` öğesini kullanarak bir ürünü istek listesinden " +"kaldırır" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "İstek listesine birçok ürün ekleyin" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Sağlanan `product_uuids` öğesini kullanarak bir istek listesine birçok ürün " +"ekler" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Siparişten bir ürünü kaldırma" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Sağlanan `product_uuids` öğesini kullanarak bir istek listesinden birçok " +"ürünü kaldırır" + +#: 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" +"• **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" +"`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" +"Örnekler: \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 +msgid "list all products (simple view)" +msgstr "Tüm ürünleri listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Tek bir ürünü alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "Düzenlenemeyen alanları koruyarak mevcut bir ürünü yeniden yazın" + +#: 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 "" +"Düzenlenemeyen alanları koruyarak mevcut bir ürünün bazı alanlarını " +"güncelleme" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Ürün silme" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "bir ürün için izin verilen tüm geri bildirimleri listeler" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Ürünün SEO meta verilerinin anlık görüntüsünü döndürür" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Tüm adresleri listeleyin" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Tek bir adres alma" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Yeni bir adres oluşturun" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Adres silme" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Adresin tamamını güncelleme" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Bir adresi kısmen güncelleme" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Otomatik tamamlanan adres girişi" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Ham veri sorgu dizesi, lütfen geo-IP uç noktasından gelen verilerle ekleyin" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "sonuç miktarını sınırlar, 1 < limit < 10, varsayılan: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "tüm geri bildirimleri listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "tek bir geri bildirim alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "bir geri bildirim oluşturun" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "bir geri bildirimi silme" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "düzenlenemeyenleri kaydederek mevcut bir geri bildirimi yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "" +"mevcut bir geri bildirimin bazı alanlarını yeniden yazarak düzenlenemezleri " +"kaydetme" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "tüm sipariş-ürün ilişkilerini listeler (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "tek bir sipariş-ürün ilişkisi alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "yeni bir sipariş-ürün ilişkisi oluşturun" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "mevcut bir sipariş-ürün ilişkisini değiştirir" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "mevcut bir sipariş-ürün ilişkisini kısmen güncelleme" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "sipariş-ürün ilişkisini silme" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Tüm markaları listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "Tek bir markayı alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Marka UUID'si veya sümüklü böcek" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Bir marka yaratın" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Bir markayı silme" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "Mevcut bir markayı yeniden yazarak düzenlenemeyenleri kaydedin" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Tüm satıcıları listeleyin (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Tek bir satıcıyı alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Bir satıcı oluşturun" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Satıcı silme" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir satıcıyı yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Tüm ürün görsellerini listeleme (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Tek bir ürün resmini alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Bir ürün görseli oluşturun" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Ürün görselini silme" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün resmini yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Tüm promosyon kodlarını listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Tek bir promosyon kodunu alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Promosyon kodu oluşturun" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Promosyon kodunu silme" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" +"Düzenlenemeyenleri kaydederek mevcut bir promosyon kodunu yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Tüm promosyonları listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Tek bir promosyonu alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Bir promosyon oluşturun" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Bir promosyonu silme" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir promosyonu yeniden yazma" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Tüm hisse senetlerini listele (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Tek bir stoku alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Stok kaydı oluşturma" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Stok kaydını silme" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir stok kaydını yeniden yazma" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Tüm ürün etiketlerini listeleme (basit görünüm)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Tek bir ürün etiketini alma (ayrıntılı görünüm)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Ürün etiketi oluşturma" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Ürün etiketini silme" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün etiketini yeniden yazma" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "" +"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " +"yeniden yazın" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Arama terimi belirtilmemiştir." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Arama" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "İsim" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Kategoriler" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Kategoriler Sümüklüböcekler" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Etiketler" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Min Fiyat" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Maksimum Fiyat" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Aktif mi" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Marka" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Nitelikler" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Miktar" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Sümüklüböcek" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Dijital mi" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Alt kategorileri dahil edin" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Kişisel sipariş edilen ürünleri dahil edin" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "SKU" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "" +"include_subcategories bayrağını kullanmak için bir category_uuid olmalıdır" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Arama (ID, ürün adı veya parça numarası)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Sonra satın alındı (dahil)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Daha önce satın alındı (dahil)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Kullanıcı e-postası" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "Kullanıcı UUID'si" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Durum" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "İnsan Tarafından Okunabilir Kimlik" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Ebeveyn" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Tüm kategori (en az 1 ürün var veya yok)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Seviye" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Ürün UUID'si" + +#: 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:41 +msgid "data to store in cache" +msgstr "Önbellekte depolanacak veriler" + +#: 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:47 +msgid "cached data" +msgstr "Önbelleğe alınmış veriler" + +#: 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:67 engine/core/views.py:257 +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:83 +msgid "add a product to the order" +msgstr "Siparişe ürün ekleme" + +#: 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: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:137 +msgid "remove all products from the order" +msgstr "Siparişten tüm ürünleri kaldırın" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "Bir sipariş satın alın" + +#: 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!" + +#: 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: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:250 +msgid "remove/add" +msgstr "Kaldır/Ekle" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Lütfen `wishlist_uuid` değerini girin." + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "Siparişe ürün ekleme" + +#: 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:438 +msgid "remove all products from the wishlist" +msgstr "Siparişten bir ürünü kaldırma" + +#: 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:510 +msgid "buy a product" +msgstr "Bir sipariş satın alın" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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:549 +msgid "add or delete a feedback for orderproduct" +msgstr "Orderproduct için bir geri bildirim ekleme veya silme" + +#: 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:576 +#, python-brace-format +msgid "order product {order_product_uuid} not found" +msgstr "Orderproduct {order_product_uuid} bulunamadı!" + +#: 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: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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} mevcut değil: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - bir cazibe gibi çalışır" + +#: 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:95 +msgid "grouped attributes" +msgstr "Gruplandırılmış nitelikler" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Nitelik grupları" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Markalar" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Kategoriler" + +#: 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: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: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:205 +msgid "tags for this category" +msgstr "Bu kategori için etiketler" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "Bu kategorideki ürünler" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Satıcılar" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Enlem (Y koordinatı)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Boylam (X koordinatı)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Nasıl yapılır" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder." + +#: 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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Geri bildirim" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Fatura adresi" + +#: 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 "" +"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:414 +msgid "total price of this order" +msgstr "Bu siparişin toplam fiyatı" + +#: 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:416 +msgid "are all products in the order digital" +msgstr "Siparişteki tüm ürünler dijital mi" + +#: 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:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Siparişler" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "Resim URL'si" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "Ürün görselleri" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "Geri Bildirimler" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "Öznitelik grupları" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Fiyat" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Miktar" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "Geri bildirim sayısı" + +#: 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:484 +msgid "discount price" +msgstr "İndirimli fiyat" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "Ürünler" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "Promosyon Kodları" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "Satıştaki ürünler" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Promosyonlar" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "Satıcı" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Ürün" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Dilek Listeleri" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "Etiketlenmiş ürünler" + +#: 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:665 +msgid "tagged categories" +msgstr "Etiketlenmiş kategoriler" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "Kategoriler' etiketleri" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "Proje adı" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Şirket Adı" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Şirket Adresi" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "Şirket Telefon Numarası" + +#: 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:681 +msgid "email host user" +msgstr "E-posta ana kullanıcısı" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "Ödeme için maksimum tutar" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "Ödeme için minimum tutar" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Analitik veriler" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Reklam verileri" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Konfigürasyon" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Dil kodu" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Dil adı" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "Dil bayrağı, eğer varsa :)" + +#: 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 +msgid "products search results" +msgstr "Ürünler arama sonuçları" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Ürünler arama sonuçları" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Bu grubun ebeveyni" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Üst öznitelik grubu" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Öznitelik grubunun adı" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Öznitelik grubu" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +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 " +"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." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Satıcının API iletişimi için gerekli kimlik bilgilerini ve uç noktaları " +"depolar" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Kimlik doğrulama bilgisi" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "Bu satıcıdan alınan ürünler için işaretlemeyi tanımlayın" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Satıcı kar payı yüzdesi" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Bu satıcının adı" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Satıcı adı" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "yanıt dosyası" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "satıcının son işlem yanıtı" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Satıcının entegrasyon dosya yolu" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Entegrasyon yolu" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +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." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Ürün etiketi için dahili etiket tanımlayıcısı" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Etiket adı" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Ürün etiketi için kullanıcı dostu ad" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Etiket görünen adı" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Ürün etiketi" + +#: engine/core/models.py:229 +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 "" +"Ürünler için kullanılan bir kategori etiketini temsil eder. Bu sınıf, " +"ürünleri ilişkilendirmek ve sınıflandırmak için kullanılabilecek bir " +"kategori etiketini modeller. Dahili bir etiket tanımlayıcısı ve kullanıcı " +"dostu bir ekran adı için öznitelikler içerir." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "kategori etiketi" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "kategori etiketleri" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +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 " +"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ı, " +"açıklamasını ve hiyerarşisini belirlemesinin yanı sıra resimler, etiketler " +"veya öncelik gibi öznitelikler atamasına olanak tanır." + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "Bu kategoriyi temsil eden bir resim yükleyin" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Kategori görüntüsü" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "Bu kategorideki ürünler için bir fiyatlandırma yüzdesi tanımlayın" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Hiyerarşik bir yapı oluşturmak için bu kategorinin üst öğesi" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Ana kategori" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Kategori adı" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Bu kategori için bir ad girin" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Bu kategori için ayrıntılı bir açıklama ekleyin" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Kategori açıklaması" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Öncelik" + +#: engine/core/models.py:438 +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." +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ı " +"dahil olmak üzere bir markayla ilgili bilgileri ve öznitelikleri işler. " +"Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil " +"edilmesini sağlar." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Bu markanın adı" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Marka adı" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Bu markayı temsil eden bir logo yükleyin" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Marka küçük imajı" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Bu markayı temsil eden büyük bir logo yükleyin" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Marka büyük imaj" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Markanın ayrıntılı bir açıklamasını ekleyin" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Marka açıklaması" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Bu markanın ilişkili olduğu isteğe bağlı kategoriler" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"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 " +"yönetim sisteminin bir parçasıdır." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Bu ürün stokunu tedarik eden satıcı" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "İlişkili satıcı" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Satış fiyatı" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Bu stok girişi ile ilişkili ürün" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "İlişkili ürün" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Bu ürün için satıcıya ödenen fiyat" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Satıcı satın alma fiyatı" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Stoktaki mevcut ürün miktarı" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Stoktaki miktar" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Satıcının SKU'su" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Varsa bu stokla ilişkili dijital dosya" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Dijital dosya" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Sistem nitelikleri" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Stok girişleri" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"Kategori, marka, etiketler, dijital durum, ad, açıklama, parça numarası ve " +"slug gibi özniteliklere sahip bir ürünü temsil eder. Derecelendirmeleri, " +"geri bildirim sayılarını, fiyatı, miktarı ve toplam siparişleri almak için " +"ilgili yardımcı program özelliklerini sağlar. E-ticaret veya envanter " +"yönetimi yapan bir sistemde kullanılmak üzere tasarlanmıştır. Bu sınıf, " +"ilgili modellerle (Kategori, Marka ve ProductTag gibi) etkileşime girer ve " +"performansı artırmak için sık erişilen özellikler için önbelleğe almayı " +"yönetir. Bir uygulama içinde ürün verilerini ve ilişkili bilgileri " +"tanımlamak ve işlemek için kullanılır." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Bu ürünün ait olduğu kategori" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "İsteğe bağlı olarak bu ürünü bir marka ile ilişkilendirin" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Bu ürünü tanımlamaya veya gruplandırmaya yardımcı olan etiketler" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Ürün dijital mi" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Ürün için net bir tanımlayıcı isim sağlayın" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Ürün adı" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Ürün Açıklaması" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Bu ürün için parça numarası" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Parça numarası" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Bu ürün için Stok Tutma Birimi" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"Sistemdeki bir özniteliği temsil eder. Bu sınıf, diğer varlıklarla " +"ilişkilendirilebilen özelleştirilebilir veri parçaları olan öznitelikleri " +"tanımlamak ve yönetmek için kullanılır. Özniteliklerin ilişkili " +"kategorileri, grupları, değer türleri ve adları vardır. Model, dize, " +"tamsayı, float, boolean, dizi ve nesne dahil olmak üzere birden fazla değer " +"türünü destekler. Bu, dinamik ve esnek veri yapılandırmasına olanak tanır." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Bu niteliğin grubu" + +#: engine/core/models.py:739 +msgid "string" +msgstr "String" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Tamsayı" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Yüzer" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolean" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Dizi" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Nesne" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Özniteliğin değerinin türü" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Değer türü" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Bu niteliğin adı" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Özniteliğin adı" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "filtrelenebilir" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "" +"Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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 " +"düzenlenmesine ve dinamik olarak temsil edilmesine olanak tanır." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Bu değerin niteliği" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Bu özniteliğin değeriyle ilişkili belirli ürün" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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 " +"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." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Erişilebilirlik için görüntü için alternatif metin sağlayın" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Resim alt metni" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Bu ürün için resim dosyasını yükleyin" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Ürün görseli" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Görüntülerin görüntülenme sırasını belirler" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Ekran önceliği" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Bu görselin temsil ettiği ürün" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Ürün görselleri" + +#: engine/core/models.py:868 +msgid "" +"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." +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ı " +"tanımlamak ve yönetmek için kullanılır. Sınıf, indirim oranını ayarlamak, " +"promosyon hakkında ayrıntılar sağlamak ve ilgili ürünlere bağlamak için " +"öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün " +"kataloğu ile entegre olur." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Seçilen ürünler için yüzde indirim" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "İndirim yüzdesi" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Bu promosyon için benzersiz bir ad girin" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Promosyon adı" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Promosyon açıklaması" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Dahil olan ürünler" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Promosyon" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"İ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" +msgstr "Kullanıcının aranıyor olarak işaretlediği ürünler" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Bu istek listesine sahip olan kullanıcı" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Dilek Listesi Sahibi" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "İstek Listesi" + +#: engine/core/models.py:985 +msgid "" +"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." +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." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Belgesel" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Belgeseller" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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 " +"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. " +"Sınıf ayrıca bir adresin bir kullanıcıyla ilişkilendirilmesine olanak " +"tanıyarak kişiselleştirilmiş veri işlemeyi kolaylaştırır." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Müşteri için adres satırı" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Adres hattı" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Sokak" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Bölge" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Şehir" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Bölge" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Posta kodu" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Ülke" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Coğrafi Konum Noktası(Boylam, Enlem)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Bu adres için geocoder'dan alınan tam JSON yanıtı" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Adres" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Adresler" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"İndirimler için kullanılabilen, geçerliliğini, indirim türünü ve " +"uygulamasını yöneten bir promosyon kodunu temsil eder. PromoCode sınıfı, " +"benzersiz tanımlayıcısı, indirim özellikleri (tutar veya yüzde), geçerlilik " +"süresi, ilişkili kullanıcı (varsa) ve kullanım durumu dahil olmak üzere bir " +"promosyon kodu hakkındaki ayrıntıları saklar. Kısıtlamaların " +"karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe " +"uygulamak için işlevsellik içerir." + +#: 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" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Promosyon kodu tanımlayıcı" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Sabit iskonto tutarı" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Yüzde indirim" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Promosyon kodunun sona erdiği zaman damgası" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Geçerlilik süresi sonu" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Geçerlilik süresini başlat" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "" +"Promosyon kodunun kullanıldığı zaman damgası, henüz kullanılmadıysa boş" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Kullanım zaman damgası" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Varsa bu promosyon koduna atanan kullanıcı" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Atanmış kullanıcı" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Promosyon kodu" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Promosyon kodları" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Sadece bir indirim türü (tutar veya yüzde) tanımlanmalı, ikisi birden veya " +"hiçbiri tanımlanmamalıdır." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Promosyon kodu zaten kullanılmış" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Promosyon kodu {self.uuid} için geçersiz indirim türü!" + +#: engine/core/models.py:1196 +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 " +"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ı " +"güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " +"ürünlerin yönetilmesini de destekler." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Bu sipariş için kullanılan fatura adresi" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Uygulanan promosyon kodu" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Bu sipariş için kullanılan gönderim adresi" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Nakliye adresi" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Siparişin yaşam döngüsündeki mevcut durumu" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Sipariş durumu" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Kullanıcılara gösterilecek bildirimlerin JSON yapısı, yönetici kullanıcı " +"arayüzünde tablo görünümü kullanılır" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Siparişi veren kullanıcı" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Kullanıcı" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Siparişin sonlandırıldığı zaman damgası" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Zaman satın alın" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "insan tarafından okunabilir kimlik" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Sipariş" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "Bir kullanıcı aynı anda yalnızca bir bekleyen emre sahip olmalıdır!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "Beklemede olmayan bir siparişe ürün ekleyemezsiniz" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz" + +#: 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 "Beklemede olmayan bir siparişten ürün kaldıramazsınız" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "{name} <{query}> sorgusu ile mevcut değil!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Promosyon kodu mevcut değil" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Fiziksel ürünleri yalnızca gönderim adresi belirtilerek satın alabilirsiniz!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +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." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Geçersiz kuvvet değeri" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Boş bir sipariş satın alamazsınız!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Kullanıcı olmadan sipariş alamazsınız!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Siparişi tamamlamak için yeterli fon yok" + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"kayıt olmadan satın alamazsınız, lütfen aşağıdaki bilgileri sağlayın: " +"müşteri adı, müşteri e-postası, müşteri telefon numarası" + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Geçersiz ödeme yöntemi: {available_payment_methods}'den {payment_method}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Ürünler için kullanıcı geri bildirimlerini yönetir. Bu sınıf, satın " +"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." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "" +"Ürünle ilgili deneyimleri hakkında kullanıcı tarafından sağlanan yorumlar" + +#: engine/core/models.py:1712 +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" +msgstr "" +"Bu geri bildirimin ilgili olduğu siparişteki belirli bir ürüne atıfta " +"bulunur" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "İlgili sipariş ürünü" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Ürün için kullanıcı tarafından atanan derecelendirme" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Ürün değerlendirmesi" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Siparişlerle ilişkili ürünleri ve bunların özniteliklerini temsil eder. " +"OrderProduct modeli, satın alma fiyatı, miktar, ürün öznitelikleri ve durum " +"gibi ayrıntılar dahil olmak üzere bir siparişin parçası olan bir ürün " +"hakkındaki bilgileri tutar. Kullanıcı ve yöneticiler için bildirimleri " +"yönetir ve ürün bakiyesini iade etme veya geri bildirim ekleme gibi " +"işlemleri gerçekleştirir. Bu model ayrıca toplam fiyatın hesaplanması veya " +"dijital ürünler için bir indirme URL'si oluşturulması gibi iş mantığını " +"destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün " +"modelleriyle entegre olur ve bunlara referans depolar." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Satın alma sırasında müşteri tarafından bu ürün için ödenen fiyat" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Sipariş anındaki satın alma fiyatı" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Sipariş edilen bu ürün hakkında yöneticiler için dahili yorumlar" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Dahili yorumlar" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Kullanıcı bildirimleri" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Bu öğenin özniteliklerinin JSON gösterimi" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Sıralı ürün özellikleri" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Bu ürünü içeren ana siparişe referans" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Ana sipariş" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Bu sipariş satırıyla ilişkili belirli ürün" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Siparişteki bu belirli ürünün miktarı" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Ürün miktarı" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Bu ürünün siparişteki mevcut durumu" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Ürün hattı durumu" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "alınmamış bir siparişe geri bildirim yapamazsınız" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "İsim" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "Entegrasyonun URL'si" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Kimlik doğrulama bilgileri" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Yalnızca bir varsayılan CRM sağlayıcınız olabilir" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "CRM" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "CRM'ler" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Siparişin CRM bağlantısı" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Siparişlerin CRM bağlantıları" + +#: engine/core/models.py:1947 +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." +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 " +"oluşturmaya yönelik bir yöntem içerir." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "İndir" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "İndirmeler" + +#: engine/core/serializers/utility.py:89 +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." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Ev" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Bize Ulaşın" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Hakkımızda" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Müşteriler karışımı (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Yeni müşteriler" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Geri dönen müşteriler" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Son 30 gün içinde müşteri faaliyeti yok." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Günlük satışlar" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Siparişler (BİTTİ)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Brüt gelir" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Siparişler" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Brüt" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Gösterge Tablosu" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Gelire genel bakış" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Net gelir" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Vergiler" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Geri dönüşler" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Brüt gelir" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Tarih yok" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Net gelir" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Geri ödeme oranı" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "İade edildi" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Düşük stok" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Düşük stoklu ürün yok." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "En çok iade edilen ürünler (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Son 30 gün içinde iade yok." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "En çok istenen ürün" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "No data yet." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "En popüler ürün" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Hızlı Bağlantılar" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Bağlantı mevcut değil." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Sevkiyat vs Dijital (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Dijital" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Sevkiyat" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Miktara göre en iyi kategoriler (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "Son 30 gün içinde kategori satışı yok." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django site yöneticisi" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Sipariş Onayı" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Logo" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Merhaba %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "" +"Siparişiniz için teşekkür ederiz #%(order.pk)s! Siparişinizi işleme " +"aldığımızı bildirmekten memnuniyet duyarız. Siparişinizin detayları " +"aşağıdadır:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Toplam" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Toplam Fiyat" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(config.EMAIL_HOST_USER)s." +msgstr "" +"Herhangi bir sorunuz varsa, %(config.EMAIL_HOST_USER)s adresinden destek " +"ekibimizle iletişime geçmekten çekinmeyin." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Saygılarımla,
the %(config.PROJECT_NAME)s team" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Tüm hakları saklıdır" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Sipariş Teslim Edildi" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Merhaba %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +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:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"ilave\n" +" BİLGİ" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Değer" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "" +"Herhangi bir sorunuz varsa, %(contact_email)s adresinden destek ekibimizle " +"iletişime geçmekten çekinmeyin." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Saygılarımla,
the %(project_name)s team" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Anahtar" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Satır Ekle" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Promosyon kodu verildi" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"Bizimle kaldığınız için teşekkür ederiz! Size bir promosyon kodu verdik\n" +" için" + +#: 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" +" the details of your order:" +msgstr "" +"Siparişiniz için teşekkür ederiz! Satın alma işleminizi onaylamaktan " +"memnuniyet duyuyoruz. Siparişinizin detayları aşağıdadır:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Nakliye fiyatı" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Siparişiniz aşağıdaki adrese teslim edilecektir:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Saygılarımla,
The %(config.PROJECT_NAME)s team" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"Tüm hakları\n" +" ayrılmış" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Hem veri hem de zaman aşımı gereklidir" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıdır" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +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 "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME} | si̇pari̇ş onayi" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | sipariş teslim edildi" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Bu eylemi gerçekleştirmek için izniniz yok." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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:106 +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 "" +"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:141 +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:173 +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:192 +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." + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "Bize ulaşın` form gönderimlerini işler." + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gelen POST isteklerinden gelen URL'leri işleme ve doğrulama isteklerini " +"işler." + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "Küresel arama sorgularını işler." + +#: engine/core/views.py:295 +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:332 +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." +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:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid gereklidir" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "sipariş ürünü mevcut değil" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" + +#: engine/core/views.py:356 +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:362 +msgid "the order product does not have a product" +msgstr "Sipariş ürününün bir ürünü yok" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "favicon bulunamadı" + +#: engine/core/views.py:404 +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." +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:416 +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 "" +"İsteği yönetici dizin sayfasına yönlendirir. Bu fonksiyon gelen HTTP " +"isteklerini işler ve onları Django yönetici arayüzü dizin sayfasına " +"yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` " +"fonksiyonunu kullanır." + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "eVibes'in geçerli sürümünü döndürür." + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Gelir ve Siparişler (son %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +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." + +#: 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." +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 " +"ilgili işlemleri gerçekleştirir. Bu sınıf, uygulamanın API katmanının bir " +"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:175 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Uygulama içinde Öznitelik nesneleriyle ilgili işlemleri gerçekleştirir. " +"Öznitelik verileriyle etkileşim için bir dizi API uç noktası sağlar. Bu " +"sınıf, Attribute nesnelerinin sorgulanmasını, filtrelenmesini ve " +"serileştirilmesini yöneterek, belirli alanlara göre filtreleme veya isteğe " +"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: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." +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, " +"güncellemek ve silmek için işlevsellik sağlar. Django REST Framework'ün " +"görünüm kümesi mekanizmalarıyla bütünleşir ve farklı eylemler için uygun " +"serileştiriciler kullanır. Filtreleme yetenekleri DjangoFilterBackend " +"aracılığıyla sağlanır." + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Kategori ile ilgili işlemler için görünümleri yönetir. CategoryViewSet " +"sınıfı, sistemdeki Kategori modeliyle ilgili işlemlerin yürütülmesinden " +"sorumludur. Kategori verilerinin alınmasını, filtrelenmesini ve " +"serileştirilmesini destekler. Görünüm kümesi, yalnızca yetkili " +"kullanıcıların belirli verilere erişebilmesini sağlamak için izinleri de " +"zorlar." + +#: 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 "" +"Brand örneklerini yönetmek için bir görünüm kümesini temsil eder. Bu sınıf, " +"Brand nesnelerini sorgulamak, filtrelemek ve serileştirmek için işlevsellik " +"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:438 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"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 " +"uygulamak ve bir ürünün ilgili geri bildirimlerine erişmek için yöntemler " +"içerir." + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Satıcı nesnelerini yönetmek için bir görünüm kümesini temsil eder. Bu " +"görünüm kümesi, Satıcı verilerinin alınmasına, filtrelenmesine ve " +"serileştirilmesine olanak tanır. Farklı eylemleri işlemek için kullanılan " +"sorgu kümesini, filtre yapılandırmalarını ve serileştirici sınıflarını " +"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: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 " +"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 " +"genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " +"kullanır." + +#: 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 " +"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 " +"birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " +"girerken izinleri buna göre zorlar." + +#: 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 " +"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 " +"geri bildirimleri işlemek için ayrıntılı bir eylem sağlar" + +#: 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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " +"işlenmesini yönetir." + +#: 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: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: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 " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"İstek Listesi işlemlerini yönetmek için ViewSet. WishlistViewSet, bir " +"kullanıcının istek listesiyle etkileşim için uç noktalar sağlayarak istek " +"listesindeki ürünlerin alınmasına, değiştirilmesine ve özelleştirilmesine " +"olanak tanır. Bu ViewSet, istek listesi ürünleri için ekleme, kaldırma ve " +"toplu eylemler gibi işlevleri kolaylaştırır. İzin kontrolleri, açık izinler " +"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:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Bu sınıf, `Address` nesnelerini yönetmek için görünüm kümesi işlevselliği " +"sağlar. AddressViewSet sınıfı, CRUD işlemlerini, filtrelemeyi ve adres " +"varlıklarıyla ilgili özel eylemleri etkinleştirir. Farklı HTTP yöntemleri, " +"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:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Coğrafi kodlama hatası: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +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 " +"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 new file mode 100644 index 00000000..5491c2c0 Binary files /dev/null and b/engine/core/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.po b/engine/core/locale/vi_VN/LC_MESSAGES/django.po new file mode 100644 index 00000000..9700baac --- /dev/null +++ b/engine/core/locale/vi_VN/LC_MESSAGES/django.po @@ -0,0 +1,3526 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: vi-vn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "ID duy nhất" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "" +"Mã định danh duy nhất (Unique ID) được sử dụng để xác định chính xác bất kỳ " +"đối tượng cơ sở dữ liệu nào." + +#: engine/core/abstract.py:20 +msgid "is active" +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" +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." + +#: engine/core/abstract.py:23 engine/core/choices.py:18 +msgid "created" +msgstr "Được tạo ra" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "Khi đối tượng lần đầu tiên xuất hiện trong cơ sở dữ liệu" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "Đã sửa đổi" + +#: engine/core/abstract.py:24 +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:85 +msgid "translations" +msgstr "Dịch thuật" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "Tổng quát" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "Quan hệ" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "Thông tin bổ sung" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "Siêu dữ liệu" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "Dấu thời gian" + +#: 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:138 +msgid "selected items have been activated." +msgstr "Các mục đã được chọn đã được kích hoạt!" + +#: 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:149 +msgid "selected items have been deactivated." +msgstr "Các mục đã chọn đã bị vô hiệu hóa!" + +#: 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: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:172 +msgid "image" +msgstr "Hình ảnh" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "Hình ảnh" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "Cổ phiếu" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "Cổ phiếu" + +#: 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: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:210 engine/core/admin.py:211 +msgid "children" +msgstr "Trẻ em" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "Cấu hình" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "Lõi" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "Hoàn thành" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "Giao hàng" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "Đã giao" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "Đã hủy" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "Thất bại" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "Đang chờ xử lý" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "Được chấp nhận" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "Tiền được hoàn lại" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "Thanh toán" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "Momental" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "Thành công" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "Sơ đồ OpenAPI ở định dạng đã chọn với ngôn ngữ đã chọn" + +#: engine/core/docs/drf/views.py:33 +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 "" +"Schema OpenApi3 cho API này. Định dạng có thể được chọn thông qua đàm phán " +"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:37 +msgid "cache I/O" +msgstr "Bộ nhớ đệm I/O" + +#: engine/core/docs/drf/views.py:46 +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 "" +"Chỉ sử dụng khóa để đọc dữ liệu được phép từ bộ nhớ đệm. Sử dụng khóa, dữ " +"liệu và thời gian chờ kèm theo xác thực để ghi dữ liệu vào bộ nhớ đệm." + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "Xem danh sách các ngôn ngữ được hỗ trợ" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "Lấy các tham số có thể truy cập của ứng dụng" + +#: engine/core/docs/drf/views.py:84 +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:57 +msgid "request a CORSed URL" +msgstr "Yêu cầu URL CORSed. Chỉ cho phép https." + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "Tìm kiếm giữa các sản phẩm, danh mục và thương hiệu" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "Điểm cuối tìm kiếm toàn cầu để tra cứu qua các bảng của dự án" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "Mua hàng với tư cách là doanh nghiệp" + +#: engine/core/docs/drf/views.py:146 +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`." + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "Tải xuống tài sản kỹ thuật số từ đơn hàng kỹ thuật số đã mua." + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "Danh sách tất cả các nhóm thuộc tính (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "Lấy một nhóm thuộc tính duy nhất (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "Tạo nhóm thuộc tính" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "Xóa nhóm thuộc tính" + +#: engine/core/docs/drf/viewsets.py:89 +msgid "rewrite an existing attribute group saving non-editables" +msgstr "" +"Viết lại nhóm thuộc tính hiện có và giữ nguyên các thuộc tính không thể " +"chỉnh sửa." + +#: engine/core/docs/drf/viewsets.py:96 +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." + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "Danh sách tất cả các thuộc tính (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "Lấy một thuộc tính duy nhất (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "Tạo một thuộc tính" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "Xóa một thuộc tính" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "" +"Viết lại một thuộc tính hiện có để lưu trữ các trường không thể chỉnh sửa." + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "" +"Cập nhật một số trường của một 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:151 +msgid "list all attribute values (simple view)" +msgstr "Danh sách tất cả các giá trị thuộc tính (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "Lấy giá trị của một thuộc tính duy nhất (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "Tạo giá trị thuộc tính" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "Xóa giá trị của một thuộc tính" + +#: engine/core/docs/drf/viewsets.py:179 +msgid "rewrite an existing attribute value saving non-editables" +msgstr "" +"Cập nhật giá trị của một thuộc tính hiện có mà không thay đổi các trường " +"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" +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." + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "Danh sách tất cả các danh mục (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "Lấy một danh mục duy nhất (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "Mã định danh duy nhất (UUID) hoặc tên gọi (slug) của danh mục" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "Tạo một danh mục" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "Xóa một danh mục" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Trả về bản sao dữ liệu meta SEO của danh mục." + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "Danh sách tất cả các danh mục (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +msgstr "" +"Đối với người dùng không phải nhân viên, chỉ các đơn hàng của chính họ được " +"hiển thị." + +#: 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" +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." + +#: engine/core/docs/drf/viewsets.py:288 +msgid "Filter orders with buy_time >= this ISO 8601 datetime" +msgstr "Lọc các đơn hàng có thời gian mua >= thời gian ISO 8601 này" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "Lọc các đơn hàng có thời gian mua <= thời gian ISO 8601 này" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "Lọc theo UUID chính xác" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "Lọc theo ID đơn hàng chính xác có thể đọc được bởi con người" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "" +"Lọc theo địa chỉ email của người dùng (khớp chính xác không phân biệt chữ " +"hoa chữ thường)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "Lọc theo UUID của người dùng" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +msgstr "" +"Lọc theo trạng thái đơn hàng (so khớp chuỗi con không phân biệt chữ hoa chữ " +"thườ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')." +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 " +"xếp theo thứ tự giảm dần (ví dụ: '-buy_time')." + +#: engine/core/docs/drf/viewsets.py:336 +msgid "retrieve a single order (detailed view)" +msgstr "Lấy một danh mục duy nhất (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "Đặt hàng UUID hoặc ID dễ đọc cho con người" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "Tạo một thuộc tính" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "Không áp dụng cho người dùng không phải nhân viên." + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "Xóa một thuộc tính" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "Giá mua tại thời điểm đặt hàng" + +#: engine/core/docs/drf/viewsets.py:382 +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 "" +"Hoàn tất việc mua hàng. Nếu sử dụng `force_balance`, việc mua hàng sẽ được " +"hoàn tất bằng số dư của người dùng; nếu sử dụng `force_payment`, một giao " +"dịch sẽ được khởi tạo." + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "Lấy đơn hàng đang chờ xử lý hiện tại của người dùng" + +#: engine/core/docs/drf/viewsets.py:398 +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:334 +msgid "purchase an order without account creation" +msgstr "Đặt hàng mà không cần tạo tài khoản" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "Hoàn tất đơn đặt hàng cho người dùng chưa đăng ký." + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "Thêm sản phẩm vào đơn hàng" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Thêm sản phẩm vào đơn hàng bằng cách sử dụng `product_uuid` và `attributes` " +"được cung cấp." + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "Thêm danh sách sản phẩm vào đơn hàng, số lượng sẽ không được tính." + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Thêm danh sách sản phẩm vào đơn hàng bằng cách sử dụng `product_uuid` và " +"`attributes` được cung cấp." + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "Xóa sản phẩm khỏi đơn hàng" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "" +"Xóa một sản phẩm khỏi đơn hàng bằng cách sử dụng `product_uuid` và " +"`attributes` được cung cấp." + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "Xóa sản phẩm khỏi đơn hàng, số lượng sẽ không được tính." + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "" +"Xóa danh sách sản phẩm khỏi đơn hàng bằng cách sử dụng `product_uuid` và " +"`attributes` được cung cấp." + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "Danh sách tất cả các thuộc tính (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "" +"Đối với người dùng không phải nhân viên, chỉ danh sách mong muốn của chính " +"họ được hiển thị." + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "Lấy một thuộc tính duy nhất (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "Tạo một thuộc tính" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "Không áp dụng cho người dùng không phải nhân viên." + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "Xóa một thuộc tính" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "" +"Viết lại một thuộc tính hiện có để lưu trữ các trường không thể chỉnh sửa." + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "" +"Cập nhật một số trường của một 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:503 +msgid "retrieve current pending wishlist of a user" +msgstr "Lấy danh sách mong muốn đang chờ xử lý hiện tại của người dùng." + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "" +"Lấy danh sách mong muốn đang chờ xử lý hiện tại của người dùng đã đăng nhập." + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "Thêm sản phẩm vào đơn hàng" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "" +"Thêm sản phẩm vào danh sách mong muốn bằng cách sử dụng `product_uuid` được " +"cung cấp." + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "Xóa sản phẩm khỏi danh sách mong muốn" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "" +"Xóa một sản phẩm khỏi danh sách mong muốn bằng cách sử dụng `product_uuid` " +"được cung cấp." + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "Thêm nhiều sản phẩm vào danh sách mong muốn" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "" +"Thêm nhiều sản phẩm vào danh sách mong muốn bằng cách sử dụng các " +"`product_uuids` được cung cấp." + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "Xóa sản phẩm khỏi đơn hàng" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `product_uuids`" +msgstr "" +"Xóa nhiều sản phẩm khỏi danh sách mong muốn bằng cách sử dụng các " +"`product_uuids` được cung cấp." + +#: 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" +"• **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" +"`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`" + +#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569 +msgid "list all products (simple view)" +msgstr "Danh sách tất cả sản phẩm (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +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" +"**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" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "Lấy thông tin chi tiết của một sản phẩm (xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +msgstr "" +"Viết lại một 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:647 engine/core/docs/drf/viewsets.py:648 +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." + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "Xóa sản phẩm" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "Danh sách tất cả các phản hồi được phép cho một sản phẩm" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "Trả về bản sao lưu dữ liệu meta SEO của sản phẩm." + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "Danh sách tất cả các địa chỉ" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "Lấy một địa chỉ duy nhất" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "Tạo một địa chỉ mới" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "Xóa địa chỉ" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "Cập nhật toàn bộ địa chỉ" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "Cập nhật một phần địa chỉ" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "Tự động hoàn thành địa chỉ nhập liệu" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "" +"Dãy truy vấn dữ liệu thô, vui lòng bổ sung dữ liệu từ điểm cuối geo-IP." + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "Giới hạn số lượng kết quả, 1 < giới hạn < 10, mặc định: 5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "Danh sách tất cả phản hồi (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "Lấy một phản hồi duy nhất (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "Tạo phản hồi" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "Xóa phản hồi" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "Viết lại phản hồi hiện có để lưu các trường không thể chỉnh sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "" +"Danh sách tất cả các mối quan hệ giữa đơn hàng và sản phẩm (cách xem đơn " +"giản)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "" +"Lấy thông tin về mối quan hệ giữa đơn hàng và sản phẩm (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "Tạo mối quan hệ mới giữa đơn hàng và sản phẩm" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "Thay thế mối quan hệ giữa đơn hàng và sản phẩm hiện có" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "Cập nhật một phần mối quan hệ giữa đơn hàng và sản phẩm hiện có" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "Xóa mối quan hệ giữa đơn hàng và sản phẩm" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "Thêm hoặc xóa phản hồi về mối quan hệ giữa đơn hàng và sản phẩm" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "Danh sách tất cả các thương hiệu (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "" +"Trích xuất thông tin chi tiết về một thương hiệu duy nhất (chế độ xem chi " +"tiết)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "Mã định danh thương hiệu (UUID) hoặc tên gọi tắt" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "Xây dựng thương hiệu" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "Xóa thương hiệu" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "Danh sách tất cả nhà cung cấp (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "Tra cứu thông tin chi tiết về một nhà cung cấp duy nhất" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "Tạo nhà cung cấp" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "Xóa nhà cung cấp" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "Danh sách tất cả hình ảnh sản phẩm (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "Lấy một hình ảnh sản phẩm (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "Tạo hình ảnh sản phẩm" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "Xóa hình ảnh sản phẩm" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "Danh sách tất cả mã khuyến mãi (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "Lấy một mã khuyến mãi duy nhất (xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "Tạo mã khuyến mãi" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "Xóa mã khuyến mãi" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "Danh sách tất cả các chương trình khuyến mãi (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "Tra cứu một chương trình khuyến mãi (xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "Tạo chương trình khuyến mãi" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "Xóa một chương trình khuyến mãi" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "Danh sách tất cả các cổ phiếu (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "Tra cứu một cổ phiếu (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "Tạo hồ sơ kho hàng" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "Xóa một bản ghi kho" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "Danh sách tất cả thẻ sản phẩm (chế độ xem đơn giản)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "Lấy thông tin thẻ sản phẩm đơn lẻ (chế độ xem chi tiết)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "Tạo thẻ sản phẩm" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "Xóa thẻ sản phẩm" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "" +"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " +"sửa." + +#: 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." + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "Không có từ khóa tìm kiếm được cung cấp." + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "Tìm kiếm" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "Tên" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "Các danh mục" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "Thể loại Tiêu đề" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "Thẻ" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "Giá tối thiểu" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "Giá tối đa" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "Đang hoạt động" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "Thương hiệu" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "Thuộc tính" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "Số lượng" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "Sên" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "Is Digital" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "Bao gồm các danh mục con" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "Gồm các sản phẩm đặt hàng cá nhân" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "Mã sản phẩm" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "Phải có trường category_uuid để sử dụng cờ include_subcategories." + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "Tìm kiếm (ID, tên sản phẩm hoặc số hiệu linh kiện)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "Được mua sau (bao gồm)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "Đã mua trước đó (bao gồm)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "Địa chỉ email của người dùng" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "UUID người dùng" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "Trạng thái" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "Mã định danh dễ đọc cho con người" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "Cha mẹ" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "Toàn bộ danh mục (có ít nhất 1 sản phẩm hoặc không)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "Cấp độ" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "Mã định danh duy nhất của sản phẩm (UUID)" + +#: 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: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: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:47 +msgid "cached data" +msgstr "Dữ liệu được lưu trữ trong bộ nhớ đệm" + +#: 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:67 engine/core/views.py:257 +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: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: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: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: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:182 +msgid "buy an order" +msgstr "Đặt hàng" + +#: 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: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}" + +#: 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:250 +msgid "remove/add" +msgstr "Xóa/Thêm" + +#: 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: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:311 +msgid "please provide wishlist_uuid value" +msgstr "Vui lòng cung cấp giá trị `wishlist_uuid`." + +#: 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: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: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: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: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:510 +msgid "buy a product" +msgstr "Đặt hàng" + +#: engine/core/graphene/mutations.py:516 +msgid "" +"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: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: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: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: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: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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} không tồn tại: {uuid}!" + +#: 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:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - hoạt động rất tốt." + +#: 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:95 +msgid "grouped attributes" +msgstr "Các thuộc tính được nhóm lại" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "Nhóm thuộc tính" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "Thương hiệu" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "Các danh mục" + +#: 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: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." + +#: 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:205 +msgid "tags for this category" +msgstr "Thẻ cho danh mục này" + +#: 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:324 engine/core/models.py:188 +msgid "vendors" +msgstr "Nhà cung cấp" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "Vĩ độ (tọa độ Y)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "Kinh độ (tọa độ X)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "Làm thế nào" + +#: 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: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: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: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:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "Phản hồi" + +#: 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:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "Địa chỉ thanh toán" + +#: 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 "" +"Đị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: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: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: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:419 +msgid "transactions for this order" +msgstr "Giao dịch cho đơn hàng này" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "Đơn hàng" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "URL hình ảnh" + +#: 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:473 engine/core/models.py:431 +#: engine/core/models.py:586 +msgid "category" +msgstr "Thể loại" + +#: 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:476 engine/core/models.py:502 +#: engine/core/models.py:595 +msgid "brand" +msgstr "Thương hiệu" + +#: 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: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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "Giá" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "Số lượng" + +#: 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: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:484 +msgid "discount price" +msgstr "Giá khuyến mãi" + +#: 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:611 +msgid "promocodes" +msgstr "Mã khuyến mãi" + +#: 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:628 engine/core/models.py:904 +msgid "promotions" +msgstr "Khuyến mãi" + +#: 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: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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "Sản phẩm" + +#: 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:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "Danh sách mong muốn" + +#: 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: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:665 +msgid "tagged categories" +msgstr "Các danh mục được gắn thẻ" + +#: 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:676 +msgid "project name" +msgstr "Tên dự án" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "Tên công ty" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "Địa chỉ công ty" + +#: 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: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:681 +msgid "email host user" +msgstr "Người dùng máy chủ email" + +#: 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:683 +msgid "minimum amount for payment" +msgstr "Số tiền tối thiểu để thanh toán" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "Dữ liệu phân tích" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "Dữ liệu quảng cáo" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "Cấu hình" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "Mã ngôn ngữ" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "Tên ngôn ngữ" + +#: 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: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 +msgid "products search results" +msgstr "Kết quả tìm kiếm sản phẩm" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "Kết quả tìm kiếm sản phẩm" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +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." + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "Cha mẹ của nhóm này" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "Nhóm thuộc tính cha" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "Tên nhóm thuộc tính" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "Nhóm thuộc tính" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"Đại diện cho một thực thể nhà cung cấp có khả năng lưu trữ thông tin về các " +"nhà cung cấp bên ngoài và các yêu cầu tương tác của họ. Lớp Vendor được sử " +"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 " +"nhà cung cấp bên thứ ba." + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "" +"Lưu trữ thông tin đăng nhập và các điểm cuối cần thiết cho việc giao tiếp " +"API của nhà cung cấp." + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "Thông tin xác thực" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "" +"Xác định định dạng đánh dấu cho các sản phẩm được lấy từ nhà cung cấp này." + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "Tỷ lệ chiết khấu của nhà cung cấp" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "Tên của nhà cung cấp này" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "Tên nhà cung cấp" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "Tệp phản hồi" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "Phản hồi xử lý cuối cùng của nhà cung cấp" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "Đường dẫn tệp tích hợp của nhà cung cấp" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "Đường dẫn tích hợp" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +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ị." + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "Mã định danh thẻ nội bộ cho thẻ sản phẩm" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "Tên ngày" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "Tên thân thiện với người dùng cho thẻ sản phẩm" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "Hiển thị tên thẻ" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "Thẻ sản phẩm" + +#: engine/core/models.py:229 +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 "" +"Đạ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." + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "Thẻ danh mục" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "Thẻ danh mục" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +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 " +"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, 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 +msgid "upload an image representing this category" +msgstr "Tải lên một hình ảnh đại diện cho danh mục này." + +#: engine/core/models.py:277 +msgid "category image" +msgstr "Hình ảnh danh mục" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "" +"Xác định tỷ lệ phần trăm chiết khấu cho các sản phẩm trong danh mục này." + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "Cha của danh mục này để tạo cấu trúc phân cấp." + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "Danh mục cha" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "Tên danh mục" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "Đặt tên cho danh mục này." + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "Thêm mô tả chi tiết cho danh mục này." + +#: engine/core/models.py:306 +msgid "category description" +msgstr "Mô tả danh mục" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "Thẻ giúp mô tả hoặc phân loại danh mục này" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "Ưu tiên" + +#: engine/core/models.py:438 +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." +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ả, " +"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." + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "Tên của thương hiệu này" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "Tên thương hiệu" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "Tải lên logo đại diện cho thương hiệu này." + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "Hình ảnh nhỏ của thương hiệu" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "Tải lên một logo lớn đại diện cho thương hiệu này." + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "Hình ảnh thương hiệu lớn" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "Thêm mô tả chi tiết về thương hiệu" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "Mô tả thương hiệu" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "Các danh mục tùy chọn mà thương hiệu này liên kết với" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 "" +"Đại diện cho lượng hàng tồn kho của một sản phẩm được quản lý trong hệ " +"thống. Lớp này cung cấp chi tiết về mối quan hệ giữa nhà cung cấp, sản phẩm " +"và thông tin tồn kho của chúng, cũng như các thuộc tính liên quan đến hàng " +"tồn kho như giá, giá mua, số lượng, SKU và tài sản kỹ thuật số. Nó là một " +"phần của hệ thống quản lý hàng tồn kho để cho phép theo dõi và đánh giá các " +"sản phẩm có sẵn từ các nhà cung cấp khác nhau." + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "Nhà cung cấp cung cấp hàng tồn kho cho sản phẩm này." + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "Nhà cung cấp liên kết" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "Giá cuối cùng cho khách hàng sau khi cộng thêm chi phí." + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "Giá bán" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "Sản phẩm liên quan đến mục hàng tồn kho này" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "Sản phẩm liên quan" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "Giá thanh toán cho nhà cung cấp cho sản phẩm này" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "Giá mua của nhà cung cấp" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "Số lượng sản phẩm hiện có trong kho" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "Số lượng hàng tồn kho" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "Mã SKU do nhà cung cấp gán để nhận dạng sản phẩm" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "Mã SKU của nhà cung cấp" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "Tệp tin kỹ thuật số liên quan đến cổ phiếu này (nếu có)" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "Tệp tin kỹ thuật số" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "Thuộc tính hệ thống" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "Nhập kho" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +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 " +"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." + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "Danh mục mà sản phẩm này thuộc về" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "Tùy chọn: Kết hợp sản phẩm này với một thương hiệu" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "Thẻ giúp mô tả hoặc phân loại sản phẩm này" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "" +"Cho biết sản phẩm này có được phân phối dưới dạng kỹ thuật số hay không." + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "Sản phẩm có phải là sản phẩm số không?" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "Cung cấp một tên gọi rõ ràng để nhận diện sản phẩm." + +#: engine/core/models.py:613 +msgid "product name" +msgstr "Tên sản phẩm" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "Thêm mô tả chi tiết về sản phẩm" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "Mô tả sản phẩm" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "Số hiệu sản phẩm cho sản phẩm này" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "Số hiệu linh kiện" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "Đơn vị quản lý hàng tồn kho cho sản phẩm này" + +#: engine/core/models.py:720 +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 " +"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, " +"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." + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "Nhóm có thuộc tính này" + +#: engine/core/models.py:739 +msgid "string" +msgstr "Dây" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "Chính trực" + +#: engine/core/models.py:741 +msgid "float" +msgstr "Nổi" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "Boolean" + +#: engine/core/models.py:743 +msgid "array" +msgstr "Mảng" + +#: engine/core/models.py:744 +msgid "object" +msgstr "Đối tượng" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "Loại giá trị của thuộc tính" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "Kiểu giá trị" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "Tên của thuộc tính này" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "Tên thuộc tính" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "có thể lọc được" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "Xác định xem thuộc tính này có thể được sử dụng để lọc hay không." + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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." +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." + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "Thuộc tính của giá trị này" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "Sản phẩm cụ thể liên quan đến giá trị của thuộc tính này" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Đại diện cho hình ảnh sản phẩm liên quan đến một sản phẩm trong hệ thống. " +"Lớp này được thiết kế để quản lý hình ảnh cho sản phẩm, bao gồm các chức " +"năng tải lên tệp hình ảnh, liên kết chúng với các sản phẩm cụ thể và xác " +"định thứ tự hiển thị của chúng. Nó cũng bao gồm tính năng truy cập với văn " +"bản thay thế cho hình ảnh." + +#: engine/core/models.py:826 +msgid "provide alternative text for the image for accessibility" +msgstr "Cung cấp văn bản thay thế cho hình ảnh để đảm bảo tính khả dụng." + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "Nội dung thay thế cho hình ảnh" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "Tải lên tệp hình ảnh cho sản phẩm này." + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "Hình ảnh sản phẩm" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "Xác định thứ tự hiển thị của các hình ảnh." + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "Ưu tiên hiển thị" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "Sản phẩm mà hình ảnh này đại diện" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "Hình ảnh sản phẩm" + +#: engine/core/models.py:868 +msgid "" +"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." +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 " +"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 " +"phẩm để xác định các mặt hàng bị ảnh hưởng trong chiến dịch." + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "Giảm giá theo phần trăm cho các sản phẩm đã chọn" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "Tỷ lệ giảm giá" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "Hãy đặt một tên duy nhất cho chương trình khuyến mãi này." + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "Tên chương trình khuyến mãi" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "Mô tả chương trình khuyến mãi" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "Chọn các sản phẩm được bao gồm trong chương trình khuyến mãi này." + +#: engine/core/models.py:899 +msgid "included products" +msgstr "Các sản phẩm được bao gồm" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "Khuyến mãi" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "" +"Đạ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." + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "Các sản phẩm mà người dùng đã đánh dấu là mong muốn" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "Người dùng sở hữu danh sách mong muốn này" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "Chủ sở hữu Danh sách mong muốn" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "Danh sách mong muốn" + +#: engine/core/models.py:985 +msgid "" +"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." +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." + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "Phim tài liệu" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "Phim tài liệu" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +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 " +"như tích hợp với các dịch vụ định vị địa lý. Lớp này được thiết kế để lưu " +"trữ thông tin địa chỉ chi tiết bao gồm các thành phần như đường phố, thành " +"phố, khu vực, quốc gia và vị trí địa lý (kinh độ và vĩ độ). Nó hỗ trợ tích " +"hợp với các API định vị địa lý, cho phép lưu trữ các phản hồi API thô để xử " +"lý hoặc kiểm tra thêm. Lớp này cũng cho phép liên kết địa chỉ với người " +"dùng, giúp quản lý dữ liệu cá nhân hóa." + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "Địa chỉ của khách hàng" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "Dòng địa chỉ" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "Phố" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "Quận" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "Thành phố" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "Khu vực" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "Mã bưu chính" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "Quốc gia" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "Phản hồi JSON đầy đủ từ dịch vụ định vị địa lý cho địa chỉ này" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "Phản hồi JSON được lưu trữ từ dịch vụ định vị địa lý" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "Địa chỉ" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "Địa chỉ" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +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." + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "Mã duy nhất mà người dùng sử dụng để đổi lấy ưu đãi giảm giá." + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "Mã khuyến mãi" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "Số tiền giảm giá cố định được áp dụng nếu không sử dụng phần trăm." + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "Số tiền giảm giá cố định" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "" +"Giảm giá theo phần trăm sẽ được áp dụng nếu không sử dụng số tiền cố định." + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "Giảm giá theo phần trăm" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "Thời gian hết hạn của mã khuyến mãi" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "Thời hạn hiệu lực kết thúc" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "Thời gian bắt đầu hiệu lực của mã khuyến mãi này" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "Thời gian bắt đầu có hiệu lực" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "Thời gian sử dụng mã khuyến mãi, để trống nếu chưa được sử dụng." + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "Dấu thời gian sử dụng" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "Người dùng được gán mã khuyến mãi này (nếu có)." + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "Người dùng được chỉ định" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "Mã khuyến mãi" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "Mã khuyến mãi" + +#: engine/core/models.py:1150 +msgid "" +"only one type of discount should be defined (amount or percent), but not " +"both or neither." +msgstr "" +"Chỉ nên định nghĩa một loại giảm giá (theo số tiền hoặc theo phần trăm), " +"nhưng không nên định nghĩa cả hai hoặc không định nghĩa cả hai." + +#: engine/core/models.py:1171 +msgid "promocode already used" +msgstr "Mã khuyến mãi đã được sử dụng." + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "Loại giảm giá không hợp lệ cho mã khuyến mãi {self.uuid}!" + +#: engine/core/models.py:1196 +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 " +"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 " +"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." + +#: engine/core/models.py:1213 +msgid "the billing address used for this order" +msgstr "Địa chỉ thanh toán được sử dụng cho đơn hàng này" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "Mã khuyến mãi tùy chọn đã được áp dụng cho đơn hàng này." + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "Đã áp dụng mã khuyến mãi" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "Địa chỉ giao hàng được sử dụng cho đơn hàng này" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "Địa chỉ giao hàng" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "Tình trạng hiện tại của đơn hàng trong chu kỳ đời sống của nó" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "Tình trạng đơn hàng" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "" +"Cấu trúc JSON của thông báo hiển thị cho người dùng, trong giao diện quản " +"trị (admin UI), chế độ xem bảng (table-view) được sử dụng." + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "Đại diện JSON của các thuộc tính đơn hàng cho đơn hàng này" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "Người dùng đã đặt đơn hàng" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "Người dùng" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "Thời gian ghi nhận khi đơn hàng được hoàn tất" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "Mua thời gian" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "Một định danh dễ đọc cho đơn hàng" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "ID dễ đọc cho con người" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "Đặt hàng" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "" +"Một người dùng chỉ được phép có một lệnh chờ duy nhất tại một thời điểm!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" +"Bạn không thể thêm sản phẩm vào đơn hàng không phải là đơn hàng đang chờ xử " +"lý." + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "Bạn không thể thêm các sản phẩm không hoạt động vào đơn hàng." + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +msgstr "Bạn không thể thêm nhiều sản phẩm hơn số lượng hiện có trong kho." + +#: 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 "" +"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 +msgid "{name} does not exist with query <{query}>" +msgstr "{name} không tồn tại với truy vấn <{query}>!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "Mã khuyến mãi không tồn tại" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "" +"Bạn chỉ có thể mua các sản phẩm vật lý có địa chỉ giao hàng được chỉ định!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "Địa chỉ không tồn tại" + +#: 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 "Bạn không thể mua hàng vào lúc này, vui lòng thử lại sau vài phút." + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "Giá trị lực không hợp lệ" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "Bạn không thể đặt hàng trống!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "Bạn không thể đặt hàng mà không có tài khoản người dùng!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "Người dùng không có số dư không thể mua bằng số dư!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "Không đủ số tiền để hoàn tất đơn hàng." + +#: engine/core/models.py:1575 +msgid "" +"you cannot buy without registration, please provide the following " +"information: customer name, customer email, customer phone number" +msgstr "" +"Bạn không thể mua hàng mà không đăng ký. Vui lòng cung cấp các thông tin " +"sau: tên khách hàng, địa chỉ email của khách hàng, số điện thoại của khách " +"hàng." + +#: engine/core/models.py:1584 +#, python-brace-format +msgid "" +"invalid payment method: {payment_method} from {available_payment_methods}" +msgstr "" +"Phương thức thanh toán không hợp lệ: {payment_method} từ " +"{available_payment_methods}!" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"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ả." + +#: engine/core/models.py:1711 +msgid "user-provided comments about their experience with the product" +msgstr "" +"Những bình luận do người dùng cung cấp về trải nghiệm của họ với sản phẩm" + +#: engine/core/models.py:1712 +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" +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." + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "Sản phẩm liên quan đến đơn hàng" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "Đánh giá do người dùng gán cho sản phẩm" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "Đánh giá sản phẩm" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Đại diện cho các sản phẩm liên quan đến đơn hàng và các thuộc tính của " +"chúng. Mô hình OrderProduct lưu trữ thông tin về một sản phẩm là một phần " +"của đơn hàng, bao gồm các chi tiết như giá mua, số lượng, thuộc tính sản " +"phẩm và trạng thái. Nó quản lý thông báo cho người dùng và quản trị viên, " +"đồng thời xử lý các thao tác như trả lại số dư sản phẩm hoặc thêm phản hồi. " +"Mô hình này cũng cung cấp các phương thức và thuộc tính hỗ trợ logic kinh " +"doanh, chẳng hạn như tính toán tổng giá hoặc tạo URL tải xuống cho sản phẩm " +"kỹ thuật số. Mô hình này tích hợp với các mô hình Order và Product và lưu " +"trữ tham chiếu đến chúng." + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "Giá mà khách hàng phải trả cho sản phẩm này tại thời điểm mua hàng." + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "Giá mua tại thời điểm đặt hàng" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "Nhận xét nội bộ dành cho quản trị viên về sản phẩm đã đặt hàng này" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "Nhận xét nội bộ" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "Thông báo cho người dùng" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "Đại diện JSON của các thuộc tính của mục này" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "Thuộc tính sản phẩm đã đặt hàng" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "Tham chiếu đến đơn hàng chính chứa sản phẩm này." + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "Đơn đặt hàng của phụ huynh" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "Sản phẩm cụ thể liên quan đến dòng đơn hàng này" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "Số lượng sản phẩm cụ thể này trong đơn hàng" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "Số lượng sản phẩm" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "Tình trạng hiện tại của sản phẩm này trong đơn hàng" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "Tình trạng dòng sản phẩm" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "Sản phẩm đặt hàng phải có đơn hàng liên quan!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "Hành động sai được chỉ định cho phản hồi: {action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "Bạn không thể phản hồi đơn hàng mà bạn chưa nhận được." + +#: engine/core/models.py:1894 +msgid "name" +msgstr "Tên" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "Đường dẫn URL của tích hợp" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "Thông tin xác thực" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "Bạn chỉ có thể có một nhà cung cấp CRM mặc định." + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "Hệ thống Quản lý Quan hệ Khách hàng" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "Liên kết CRM của đơn hàng" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "Liên kết CRM của đơn hàng" + +#: engine/core/models.py:1947 +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." +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." + +#: engine/core/models.py:1961 +msgid "download" +msgstr "Tải xuống" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "Tải xuống" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "" +"Bạn phải cung cấp bình luận, đánh giá và mã UUID của sản phẩm để thêm phản " +"hồi." + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "Trang chủ" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "Liên hệ với chúng tôi" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "Giới thiệu về chúng tôi" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "Hỗn hợp khách hàng (30 ngày)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "Khách hàng mới" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "Khách hàng quay lại" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "Không có hoạt động của khách hàng trong 30 ngày qua." + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "Doanh số hàng ngày" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "Đơn hàng (Đã hoàn thành)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "Doanh thu tổng" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "Đơn hàng" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "Bảng điều khiển" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "Tổng quan về thu nhập" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "Doanh thu ròng" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "Thuế" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "Trả hàng" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "Doanh thu tổng" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "Không có dữ liệu" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "Tổng giá trị giao dịch" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "Giá trị đơn hàng trung bình" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "Doanh thu ròng" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "Tỷ lệ hoàn tiền" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "Đã trả lại" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "Hàng tồn kho thấp" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "Không có sản phẩm nào trong tình trạng tồn kho thấp." + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "Hầu hết các sản phẩm được trả lại (30 ngày)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "Không có đơn hàng trả lại trong 30 ngày qua." + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "Sản phẩm được mong đợi nhất" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "Chưa có dữ liệu." + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "Sản phẩm phổ biến nhất" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "Liên kết nhanh" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "Không có liên kết nào có sẵn." + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "Giao hàng vật lý so với bản kỹ thuật số (30 ngày)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "Số hóa" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "Đã giao hàng" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "Các danh mục hàng đầu theo số lượng (30 ngày)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "" +"Không có doanh số bán hàng trong bất kỳ danh mục nào trong 30 ngày qua." + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Quản trị viên trang web Django" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "Xác nhận đơn hàng" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "Biểu trưng" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "Xin chào %(order.user.first_name)s," + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" 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 " +"rằng đơn hàng của quý khách đã được tiếp nhận và đang được xử lý. Dưới đây " +"là chi tiết đơn hàng của quý khách:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "Tổng cộng" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "Giá tổng cộng" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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." + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "Trân trọng,
Đội ngũ %(config.PROJECT_NAME)s" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "Tất cả các quyền được bảo lưu." + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "Đơn hàng đã được giao" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "Xin chào %(user_first_name)s," + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "" +"Chúng tôi đã xử lý thành công đơn hàng của quý khách số №%(order_uuid)s! " +"Dưới đây là chi tiết đơn hàng của quý khách:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "Thông tin bổ sung" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "Giá trị" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +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." + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "Trân trọng,
Đội ngũ %(project_name)s" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "Chìa khóa" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "Thêm hàng" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "Mã khuyến mãi được cấp" + +#: engine/core/templates/promocode_granted_email.html:101 +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" + +#: 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" +" 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 " +"quý khách. Dưới đây là chi tiết đơn hàng của quý khách:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "Giá vận chuyển" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "Đơn hàng của quý khách sẽ được giao đến địa chỉ sau:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "Trân trọng,
Đội ngũ %(config.PROJECT_NAME)s" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "Tất cả các quyền được bảo lưu." + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "Cả dữ liệu và thời gian chờ đều là bắt buộc." + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "" +"Giá trị thời gian chờ không hợp lệ, nó phải nằm trong khoảng từ 0 đến " +"216.000 giây." + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +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 "{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 "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | Đơn hàng đã được giao" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "Bạn không có quyền thực hiện hành động này." + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "Tham số NOMINATIM_URL phải được cấu hình!" + +#: engine/core/validators.py:19 +#, python-brace-format +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:91 +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 "" +"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:106 +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 "" +"Xử lý phản hồi chi tiết cho sơ đồ trang web. Chức năng này xử lý yêu cầu, " +"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:141 +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:173 +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:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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:219 +msgid "Handles `contact us` form submissions." +msgstr "Xử lý các biểu mẫu liên hệ." + +#: engine/core/views.py:240 +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:280 +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:295 +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:332 +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." +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." + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid là trường bắt buộc." + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "Sản phẩm không tồn tại" + +#: engine/core/views.py:353 +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:356 +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:362 +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:399 +msgid "favicon not found" +msgstr "Biểu tượng trang web không tìm thấy" + +#: engine/core/views.py:404 +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." +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." + +#: engine/core/views.py:416 +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 "" +"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:429 +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:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "Doanh thu & Đơn hàng (lần cuối %(days)d)" + +#: engine/core/views.py:793 +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 " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Xác định một tập hợp xem (viewset) để quản lý các thao tác liên quan đến " +"Evibes. Lớp EvibesViewSet kế thừa từ ModelViewSet và cung cấp các chức năng " +"để xử lý các hành động và thao tác trên các thực thể Evibes. Nó bao gồm hỗ " +"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: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." +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." + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +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." + +#: 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." +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 " +"AttributeValue. Nó tích hợp với cơ chế bộ xem của Django REST Framework và " +"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:213 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Quản lý các chế độ xem liên quan đến các thao tác của mô hình Category. Lớp " +"CategoryViewSet chịu trách nhiệm xử lý các thao tác liên quan đến mô hình " +"Category trong hệ thống. Nó hỗ trợ việc truy xuất, lọc và serialize dữ liệu " +"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: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 "" +"Đại diện cho một tập hợp các view để quản lý các thực thể thương hiệu. Lớp " +"này cung cấp các chức năng để truy vấn, lọc và serialize các đối tượng " +"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:438 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Quản lý các hoạt động liên quan đến mô hình `Product` trong hệ thống. Lớp " +"này cung cấp một tập hợp các phương thức (viewset) để quản lý sản phẩm, bao " +"gồm lọc, serialization và các thao tác trên các thực thể cụ thể. Nó kế thừa " +"từ `EvibesViewSet` để sử dụng các chức năng chung và tích hợp với khung làm " +"việc Django REST để thực hiện các thao tác API RESTful. Bao gồm các phương " +"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:574 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Đại diện cho một tập hợp các chế độ xem (viewset) để quản lý các đối tượng " +"Nhà cung cấp (Vendor). Tập hợp chế độ xem này cho phép truy xuất, lọc và " +"serialize dữ liệu Nhà cung cấp. Nó định nghĩa tập hợp truy vấn (queryset), " +"cấu hình bộ lọc và các lớp serializer được sử dụng để xử lý các hành động " +"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: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 " +"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 " +"liên quan đến đối tượng Feedback, bao gồm liệt kê, lọc và truy xuất chi " +"tiết. Mục đích của tập hợp này là cung cấp các trình serializer khác nhau " +"cho các hành động khác nhau và thực hiện xử lý dựa trên quyền truy cập đối " +"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: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 " +"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 " +"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 " +"chờ xử lý của người dùng đã đăng nhập hiện tại. ViewSet sử dụng nhiều trình " +"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: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 " +"feedback on OrderProduct instances" +msgstr "" +"Cung cấp một bộ xem (viewset) để quản lý các thực thể OrderProduct. Bộ xem " +"này cho phép thực hiện các thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa) và các " +"hành động tùy chỉnh đặc thù cho mô hình OrderProduct. Nó bao gồm các tính " +"năng lọc, kiểm tra quyền truy cập và chuyển đổi trình serializer dựa trên " +"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: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:892 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +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: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: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: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 " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +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 " +"trừ khi được cấp quyền rõ ràng." + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +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 " +"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:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "Lỗi địa chỉ địa lý: {e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +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ỗ " +"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 new file mode 100644 index 00000000..a5045f04 Binary files /dev/null and b/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 00000000..029c7292 --- /dev/null +++ b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,3214 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: EVIBES 2025.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-10 22:12+0300\n" +"PO-Revision-Date: 2025-01-30 03:27+0000\n" +"Last-Translator: EGOR GORBUNOV \n" +"Language-Team: BRITISH ENGLISH \n" +"Language: zh-hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: engine/core/abstract.py:12 +msgid "unique id" +msgstr "唯一 ID" + +#: engine/core/abstract.py:13 +msgid "unique id is used to surely identify any database object" +msgstr "唯一 ID 用于确定识别任何数据库对象" + +#: engine/core/abstract.py:20 +msgid "is active" +msgstr "处于活动状态" + +#: engine/core/abstract.py:21 +msgid "" +"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" +msgstr "创建" + +#: engine/core/abstract.py:23 +msgid "when the object first appeared on the database" +msgstr "对象首次出现在数据库中的时间" + +#: engine/core/abstract.py:24 +msgid "modified" +msgstr "改装" + +#: engine/core/abstract.py:24 +msgid "when the object was last modified" +msgstr "对象最后一次编辑的时间" + +#: engine/core/admin.py:85 +msgid "translations" +msgstr "翻译" + +#: engine/core/admin.py:89 +msgid "general" +msgstr "一般情况" + +#: engine/core/admin.py:91 +msgid "relations" +msgstr "关系" + +#: engine/core/admin.py:93 +msgid "additional info" +msgstr "其他信息" + +#: engine/core/admin.py:111 +msgid "metadata" +msgstr "元数据" + +#: engine/core/admin.py:118 +msgid "timestamps" +msgstr "时间戳" + +#: engine/core/admin.py:133 +#, python-format +msgid "activate selected %(verbose_name_plural)s" +msgstr "激活选定的 %(verbose_name_plural)s" + +#: engine/core/admin.py:138 +msgid "selected items have been activated." +msgstr "所选项目已激活!" + +#: engine/core/admin.py:144 +#, python-format +msgid "deactivate selected %(verbose_name_plural)s" +msgstr "停用选定的 %(verbose_name_plural)s" + +#: engine/core/admin.py:149 +msgid "selected items have been deactivated." +msgstr "选定项目已停用!" + +#: 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:161 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:810 +msgid "attribute values" +msgstr "属性值" + +#: engine/core/admin.py:172 +msgid "image" +msgstr "图片" + +#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474 +msgid "images" +msgstr "图片" + +#: engine/core/admin.py:184 engine/core/models.py:566 +msgid "stock" +msgstr "库存" + +#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640 +msgid "stocks" +msgstr "股票" + +#: engine/core/admin.py:196 engine/core/models.py:1818 +msgid "order product" +msgstr "订购产品" + +#: 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:210 engine/core/admin.py:211 +msgid "children" +msgstr "儿童" + +#: engine/core/admin.py:977 +msgid "Config" +msgstr "配置" + +#: engine/core/apps.py:8 +msgid "core" +msgstr "核心" + +#: engine/core/choices.py:4 engine/core/choices.py:20 +msgid "finished" +msgstr "完成" + +#: engine/core/choices.py:5 engine/core/choices.py:19 +msgid "delivering" +msgstr "交付" + +#: engine/core/choices.py:6 +msgid "delivered" +msgstr "已交付" + +#: engine/core/choices.py:7 +msgid "canceled" +msgstr "已取消" + +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 +msgid "failed" +msgstr "失败" + +#: engine/core/choices.py:9 engine/core/choices.py:15 +msgid "pending" +msgstr "待定" + +#: engine/core/choices.py:10 +msgid "accepted" +msgstr "已接受" + +#: engine/core/choices.py:11 +msgid "money returned" +msgstr "退还的款项" + +#: engine/core/choices.py:17 +msgid "payment" +msgstr "付款方式" + +#: engine/core/choices.py:21 +msgid "momental" +msgstr "时刻" + +#: engine/core/choices.py:24 +msgid "successful" +msgstr "成功" + +#: engine/core/docs/drf/views.py:31 +msgid "OpenAPI schema in selected format with selected language" +msgstr "选定格式和语言的 OpenAPI 模式" + +#: engine/core/docs/drf/views.py:33 +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 和查询参数选择语言。" + +#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37 +msgid "cache I/O" +msgstr "缓存输入/输出" + +#: engine/core/docs/drf/views.py:46 +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 "" +"仅使用密钥从缓存中读取允许的数据。\n" +"应用密钥、数据和带验证的超时,将数据写入缓存。" + +#: engine/core/docs/drf/views.py:62 +msgid "get a list of supported languages" +msgstr "获取支持的语言列表" + +#: engine/core/docs/drf/views.py:74 +msgid "get application's exposable parameters" +msgstr "获取应用程序的可公开参数" + +#: engine/core/docs/drf/views.py:84 +msgid "send a message to the support team" +msgstr "向支持团队发送信息" + +#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57 +msgid "request a CORSed URL" +msgstr "请求 CORSed URL。只允许使用 https。" + +#: engine/core/docs/drf/views.py:112 +msgid "Search between products, categories and brands" +msgstr "在产品、类别和品牌之间进行搜索" + +#: engine/core/docs/drf/views.py:130 +msgid "global search endpoint to query across project's tables" +msgstr "全局搜索端点可跨项目表格进行查询" + +#: engine/core/docs/drf/views.py:139 +msgid "purchase an order as a business" +msgstr "以企业身份购买订单" + +#: engine/core/docs/drf/views.py:146 +msgid "" +"purchase an order as a business, using the provided `products` with " +"`product_uuid` and `attributes`." +msgstr "使用提供的带有 `product_uuid` 和 `attributes` 的 `products` 作为企业购买订单。" + +#: engine/core/docs/drf/views.py:164 +msgid "download a digital asset from purchased digital order" +msgstr "从购买的数字订单中下载数字资产" + +#: engine/core/docs/drf/viewsets.py:61 +msgid "list all attribute groups (simple view)" +msgstr "列出所有属性组(简单视图)" + +#: engine/core/docs/drf/viewsets.py:68 +msgid "retrieve a single attribute group (detailed view)" +msgstr "检索单个属性组(详细视图)" + +#: engine/core/docs/drf/viewsets.py:75 +msgid "create an attribute group" +msgstr "创建属性组" + +#: engine/core/docs/drf/viewsets.py:82 +msgid "delete an attribute group" +msgstr "删除属性组" + +#: engine/core/docs/drf/viewsets.py:89 +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 "重写现有属性组的某些字段,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:106 +msgid "list all attributes (simple view)" +msgstr "列出所有属性(简单视图)" + +#: engine/core/docs/drf/viewsets.py:113 +msgid "retrieve a single attribute (detailed view)" +msgstr "检索单个属性(详细视图)" + +#: engine/core/docs/drf/viewsets.py:120 +msgid "create an attribute" +msgstr "创建属性" + +#: engine/core/docs/drf/viewsets.py:127 +msgid "delete an attribute" +msgstr "删除属性" + +#: engine/core/docs/drf/viewsets.py:134 +msgid "rewrite an existing attribute saving non-editables" +msgstr "重写现有属性,保存不可编辑属性" + +#: engine/core/docs/drf/viewsets.py:141 +msgid "rewrite some fields of an existing attribute saving non-editables" +msgstr "重写现有属性的某些字段,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:151 +msgid "list all attribute values (simple view)" +msgstr "列出所有属性值(简单视图)" + +#: engine/core/docs/drf/viewsets.py:158 +msgid "retrieve a single attribute value (detailed view)" +msgstr "读取单个属性值(详细视图)" + +#: engine/core/docs/drf/viewsets.py:165 +msgid "create an attribute value" +msgstr "创建属性值" + +#: engine/core/docs/drf/viewsets.py:172 +msgid "delete an attribute value" +msgstr "删除属性值" + +#: engine/core/docs/drf/viewsets.py:179 +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 "重写现有属性值的某些字段,保存不可编辑的属性值" + +#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197 +msgid "list all categories (simple view)" +msgstr "列出所有类别(简单视图)" + +#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205 +msgid "retrieve a single category (detailed view)" +msgstr "检索单个类别(详细视图)" + +#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258 +msgid "Category UUID or slug" +msgstr "类别 UUID 或标签" + +#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221 +msgid "create a category" +msgstr "创建类别" + +#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229 +msgid "delete a category" +msgstr "删除类别" + +#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237 +msgid "rewrite an existing category saving non-editables" +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 "重写现有类别的某些字段,保存不可编辑内容" + +#: 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:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "搜索引擎优化元快照" + +#: engine/core/docs/drf/viewsets.py:253 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "返回类别的搜索引擎优化元数据快照" + +#: engine/core/docs/drf/viewsets.py:274 +msgid "list all orders (simple view)" +msgstr "列出所有类别(简单视图)" + +#: engine/core/docs/drf/viewsets.py:275 +msgid "for non-staff users, only their own orders are returned." +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" +msgstr "" +"在 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" +msgstr "过滤买入时间 >= 此 ISO 8601 日期的订单" + +#: engine/core/docs/drf/viewsets.py:293 +msgid "Filter orders with buy_time <= this ISO 8601 datetime" +msgstr "过滤买入时间 <= 此 ISO 8601 日期的订单" + +#: engine/core/docs/drf/viewsets.py:298 +msgid "Filter by exact order UUID" +msgstr "按准确订单 UUID 筛选" + +#: engine/core/docs/drf/viewsets.py:303 +msgid "Filter by exact human-readable order ID" +msgstr "根据准确的人工可读订单 ID 进行筛选" + +#: engine/core/docs/drf/viewsets.py:308 +msgid "Filter by user's email (case-insensitive exact match)" +msgstr "按用户电子邮件过滤(不区分大小写精确匹配)" + +#: engine/core/docs/drf/viewsets.py:313 +msgid "Filter by user's UUID" +msgstr "按用户的 UUID 筛选" + +#: engine/core/docs/drf/viewsets.py:318 +msgid "Filter by order status (case-insensitive substring match)" +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')." +msgstr "" +"按以下一项排序: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)" +msgstr "检索单个类别(详细视图)" + +#: engine/core/docs/drf/viewsets.py:341 +msgid "Order UUID or human-readable id" +msgstr "订单 UUID 或人类可读 ID" + +#: engine/core/docs/drf/viewsets.py:351 +msgid "create an order" +msgstr "创建属性" + +#: engine/core/docs/drf/viewsets.py:352 +msgid "doesn't work for non-staff users." +msgstr "不适用于非工作人员用户。" + +#: engine/core/docs/drf/viewsets.py:359 +msgid "delete an order" +msgstr "删除属性" + +#: engine/core/docs/drf/viewsets.py:366 +msgid "rewrite an existing order saving non-editables" +msgstr "重写现有类别,保存不可编辑内容" + +#: engine/core/docs/drf/viewsets.py:373 +msgid "rewrite some fields of an existing order saving non-editables" +msgstr "重写现有类别的某些字段,保存不可编辑内容" + +#: engine/core/docs/drf/viewsets.py:380 +msgid "purchase an order" +msgstr "订购时的购买价格" + +#: engine/core/docs/drf/viewsets.py:382 +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\",则启动交易。" + +#: engine/core/docs/drf/viewsets.py:397 +msgid "retrieve current pending order of a user" +msgstr "检索用户当前的挂单" + +#: engine/core/docs/drf/viewsets.py:398 +msgid "retrieves a current pending order of an authenticated user" +msgstr "检索已验证用户的当前待处理订单" + +#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334 +msgid "purchase an order without account creation" +msgstr "无需创建账户即可购买订单" + +#: engine/core/docs/drf/viewsets.py:409 +msgid "finalizes the order purchase for a non-registered user." +msgstr "完成非注册用户的订单购买。" + +#: engine/core/docs/drf/viewsets.py:420 +msgid "add product to order" +msgstr "在订单中添加产品" + +#: engine/core/docs/drf/viewsets.py:421 +msgid "" +"adds a product to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品添加到订单中。" + +#: engine/core/docs/drf/viewsets.py:429 +msgid "add a list of products to order, quantities will not count" +msgstr "添加要订购的产品列表,不计算数量" + +#: engine/core/docs/drf/viewsets.py:430 +msgid "" +"adds a list of products to an order using the provided `product_uuid` and " +"`attributes`." +msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品列表添加到订单中。" + +#: engine/core/docs/drf/viewsets.py:438 +msgid "remove product from order" +msgstr "从订单中删除产品" + +#: engine/core/docs/drf/viewsets.py:439 +msgid "" +"removes a product from an order using the provided `product_uuid` and " +"`attributes`." +msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品。" + +#: engine/core/docs/drf/viewsets.py:447 +msgid "remove product from order, quantities will not count" +msgstr "从订单中删除产品,不计算数量" + +#: engine/core/docs/drf/viewsets.py:448 +msgid "" +"removes a list of products from an order using the provided `product_uuid` " +"and `attributes`" +msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品列表。" + +#: engine/core/docs/drf/viewsets.py:459 +msgid "list all wishlists (simple view)" +msgstr "列出所有属性(简单视图)" + +#: engine/core/docs/drf/viewsets.py:460 +msgid "for non-staff users, only their own wishlists are returned." +msgstr "对于非工作人员用户,只返回他们自己的愿望清单。" + +#: engine/core/docs/drf/viewsets.py:467 +msgid "retrieve a single wishlist (detailed view)" +msgstr "检索单个属性(详细视图)" + +#: engine/core/docs/drf/viewsets.py:474 +msgid "create an wishlist" +msgstr "创建属性" + +#: engine/core/docs/drf/viewsets.py:475 +msgid "Doesn't work for non-staff users." +msgstr "不适用于非工作人员用户。" + +#: engine/core/docs/drf/viewsets.py:482 +msgid "delete an wishlist" +msgstr "删除属性" + +#: engine/core/docs/drf/viewsets.py:489 +msgid "rewrite an existing wishlist saving non-editables" +msgstr "重写现有属性,保存不可编辑属性" + +#: engine/core/docs/drf/viewsets.py:496 +msgid "rewrite some fields of an existing wishlist saving non-editables" +msgstr "重写现有属性的某些字段,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:503 +msgid "retrieve current pending wishlist of a user" +msgstr "检索用户当前待处理的心愿单" + +#: engine/core/docs/drf/viewsets.py:504 +msgid "retrieves a current pending wishlist of an authenticated user" +msgstr "检索已通过身份验证用户的当前待处理愿望清单" + +#: engine/core/docs/drf/viewsets.py:514 +msgid "add product to wishlist" +msgstr "在订单中添加产品" + +#: engine/core/docs/drf/viewsets.py:515 +msgid "adds a product to an wishlist using the provided `product_uuid`" +msgstr "使用提供的 `product_uuid` 将产品添加到愿望清单中" + +#: engine/core/docs/drf/viewsets.py:523 +msgid "remove product from wishlist" +msgstr "从愿望清单中删除产品" + +#: engine/core/docs/drf/viewsets.py:524 +msgid "removes a product from an wishlist using the provided `product_uuid`" +msgstr "使用提供的 `product_uuid` 从愿望清单中删除产品" + +#: engine/core/docs/drf/viewsets.py:532 +msgid "add many products to wishlist" +msgstr "将许多产品添加到愿望清单" + +#: engine/core/docs/drf/viewsets.py:533 +msgid "adds many products to an wishlist using the provided `product_uuids`" +msgstr "使用提供的 `product_uuids` 将许多产品添加到愿望清单中" + +#: engine/core/docs/drf/viewsets.py:541 +msgid "remove many products from wishlist" +msgstr "从订单中删除产品" + +#: engine/core/docs/drf/viewsets.py:542 +msgid "" +"removes many products from an wishlist using the provided `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" +"• **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" +"`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" +"示例 \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 +msgid "list all products (simple view)" +msgstr "列出所有产品(简单视图)" + +#: engine/core/docs/drf/viewsets.py:574 +msgid "(exact) Product UUID" +msgstr "(产品 UUID" + +#: engine/core/docs/drf/viewsets.py:581 +msgid "" +"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、评分、名称、标签、创建、修改、价格、随机" + +#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599 +msgid "retrieve a single product (detailed view)" +msgstr "检索单个产品(详细视图)" + +#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634 +#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710 +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 "创建产品" + +#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629 +msgid "rewrite an existing product, preserving non-editable fields" +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 "更新现有产品的某些字段,保留不可编辑的字段" + +#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667 +msgid "delete a product" +msgstr "删除产品" + +#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686 +msgid "lists all permitted feedbacks for a product" +msgstr "列出产品的所有允许反馈" + +#: engine/core/docs/drf/viewsets.py:705 +msgid "returns a snapshot of the product's SEO meta data" +msgstr "返回产品的搜索引擎优化元数据快照" + +#: engine/core/docs/drf/viewsets.py:726 +msgid "list all addresses" +msgstr "列出所有地址" + +#: engine/core/docs/drf/viewsets.py:736 +msgid "retrieve a single address" +msgstr "检索单个地址" + +#: engine/core/docs/drf/viewsets.py:746 +msgid "create a new address" +msgstr "创建新地址" + +#: engine/core/docs/drf/viewsets.py:757 +msgid "delete an address" +msgstr "删除地址" + +#: engine/core/docs/drf/viewsets.py:767 +msgid "update an entire address" +msgstr "更新整个地址" + +#: engine/core/docs/drf/viewsets.py:778 +msgid "partially update an address" +msgstr "部分更新地址" + +#: engine/core/docs/drf/viewsets.py:789 +msgid "autocomplete address suggestions" +msgstr "自动完成地址输入" + +#: engine/core/docs/drf/viewsets.py:794 +msgid "raw data query string, please append with data from geo-IP endpoint" +msgstr "原始数据查询字符串,请附加来自地理 IP 端点的数据" + +#: engine/core/docs/drf/viewsets.py:800 +msgid "limit the results amount, 1 < limit < 10, default: 5" +msgstr "限制结果数量,1 < limit < 10,默认:5" + +#: engine/core/docs/drf/viewsets.py:816 +msgid "list all feedbacks (simple view)" +msgstr "列出所有反馈(简单视图)" + +#: engine/core/docs/drf/viewsets.py:823 +msgid "retrieve a single feedback (detailed view)" +msgstr "检索单个反馈(详细视图)" + +#: engine/core/docs/drf/viewsets.py:830 +msgid "create a feedback" +msgstr "创建反馈" + +#: engine/core/docs/drf/viewsets.py:837 +msgid "delete a feedback" +msgstr "删除反馈" + +#: engine/core/docs/drf/viewsets.py:844 +msgid "rewrite an existing feedback saving non-editables" +msgstr "重写现有的反馈,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:851 +msgid "rewrite some fields of an existing feedback saving non-editables" +msgstr "重写现有反馈的某些字段,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:861 +msgid "list all order–product relations (simple view)" +msgstr "列出所有订单-产品关系(简单视图)" + +#: engine/core/docs/drf/viewsets.py:871 +msgid "retrieve a single order–product relation (detailed view)" +msgstr "检索单一订单-产品关系(详细视图)" + +#: engine/core/docs/drf/viewsets.py:881 +msgid "create a new order–product relation" +msgstr "创建新的订单-产品关系" + +#: engine/core/docs/drf/viewsets.py:891 +msgid "replace an existing order–product relation" +msgstr "替换现有的订单-产品关系" + +#: engine/core/docs/drf/viewsets.py:901 +msgid "partially update an existing order–product relation" +msgstr "部分更新现有的订单-产品关系" + +#: engine/core/docs/drf/viewsets.py:911 +msgid "delete an order–product relation" +msgstr "删除订单-产品关系" + +#: engine/core/docs/drf/viewsets.py:921 +msgid "add or remove feedback on an order–product relation" +msgstr "添加或删除订单与产品关系中的反馈信息" + +#: engine/core/docs/drf/viewsets.py:938 +msgid "list all brands (simple view)" +msgstr "列出所有品牌(简单视图)" + +#: engine/core/docs/drf/viewsets.py:945 +msgid "retrieve a single brand (detailed view)" +msgstr "检索单一品牌(详细视图)" + +#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993 +msgid "Brand UUID or slug" +msgstr "品牌 UUID 或标签" + +#: engine/core/docs/drf/viewsets.py:960 +msgid "create a brand" +msgstr "创建品牌" + +#: engine/core/docs/drf/viewsets.py:967 +msgid "delete a brand" +msgstr "删除品牌" + +#: engine/core/docs/drf/viewsets.py:974 +msgid "rewrite an existing brand saving non-editables" +msgstr "重写现有品牌,节省非编辑材料" + +#: engine/core/docs/drf/viewsets.py:981 +msgid "rewrite some fields of an existing brand saving non-editables" +msgstr "重写现有品牌的某些字段,保存不可编辑字段" + +#: engine/core/docs/drf/viewsets.py:1006 +msgid "list all vendors (simple view)" +msgstr "列出所有供应商(简单视图)" + +#: engine/core/docs/drf/viewsets.py:1013 +msgid "retrieve a single vendor (detailed view)" +msgstr "检索单个供应商(详细视图)" + +#: engine/core/docs/drf/viewsets.py:1020 +msgid "create a vendor" +msgstr "创建供应商" + +#: engine/core/docs/drf/viewsets.py:1027 +msgid "delete a vendor" +msgstr "删除供应商" + +#: engine/core/docs/drf/viewsets.py:1034 +msgid "rewrite an existing vendor saving non-editables" +msgstr "重写现有供应商,保存不可编辑内容" + +#: engine/core/docs/drf/viewsets.py:1041 +msgid "rewrite some fields of an existing vendor saving non-editables" +msgstr "重写现有供应商的某些字段,保存不可编辑字段" + +#: engine/core/docs/drf/viewsets.py:1051 +msgid "list all product images (simple view)" +msgstr "列出所有产品图片(简单视图)" + +#: engine/core/docs/drf/viewsets.py:1058 +msgid "retrieve a single product image (detailed view)" +msgstr "检索单个产品图片(详细视图)" + +#: engine/core/docs/drf/viewsets.py:1065 +msgid "create a product image" +msgstr "创建产品形象" + +#: engine/core/docs/drf/viewsets.py:1072 +msgid "delete a product image" +msgstr "删除产品图像" + +#: engine/core/docs/drf/viewsets.py:1079 +msgid "rewrite an existing product image saving non-editables" +msgstr "重写现有产品图像,保存不可编辑图像" + +#: engine/core/docs/drf/viewsets.py:1086 +msgid "rewrite some fields of an existing product image saving non-editables" +msgstr "重写现有产品图像的某些字段,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:1096 +msgid "list all promo codes (simple view)" +msgstr "列出所有促销代码(简单视图)" + +#: engine/core/docs/drf/viewsets.py:1103 +msgid "retrieve a single promo code (detailed view)" +msgstr "检索单个促销代码(详细视图)" + +#: engine/core/docs/drf/viewsets.py:1110 +msgid "create a promo code" +msgstr "创建促销代码" + +#: engine/core/docs/drf/viewsets.py:1117 +msgid "delete a promo code" +msgstr "删除促销代码" + +#: engine/core/docs/drf/viewsets.py:1124 +msgid "rewrite an existing promo code saving non-editables" +msgstr "重写现有促销代码,保存不可编辑的代码" + +#: engine/core/docs/drf/viewsets.py:1131 +msgid "rewrite some fields of an existing promo code saving non-editables" +msgstr "重写现有促销代码的某些字段,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:1141 +msgid "list all promotions (simple view)" +msgstr "列出所有促销活动(简单视图)" + +#: engine/core/docs/drf/viewsets.py:1148 +msgid "retrieve a single promotion (detailed view)" +msgstr "检索单个促销活动(详细视图)" + +#: engine/core/docs/drf/viewsets.py:1155 +msgid "create a promotion" +msgstr "创建促销活动" + +#: engine/core/docs/drf/viewsets.py:1162 +msgid "delete a promotion" +msgstr "删除促销" + +#: engine/core/docs/drf/viewsets.py:1169 +msgid "rewrite an existing promotion saving non-editables" +msgstr "重写现有促销活动,保存不可编辑内容" + +#: engine/core/docs/drf/viewsets.py:1176 +msgid "rewrite some fields of an existing promotion saving non-editables" +msgstr "重写现有促销活动的某些字段,保存不可编辑字段" + +#: engine/core/docs/drf/viewsets.py:1186 +msgid "list all stocks (simple view)" +msgstr "列出所有股票(简单视图)" + +#: engine/core/docs/drf/viewsets.py:1193 +msgid "retrieve a single stock (detailed view)" +msgstr "检索单个股票(详细视图)" + +#: engine/core/docs/drf/viewsets.py:1200 +msgid "create a stock record" +msgstr "创建库存记录" + +#: engine/core/docs/drf/viewsets.py:1207 +msgid "delete a stock record" +msgstr "删除库存记录" + +#: engine/core/docs/drf/viewsets.py:1214 +msgid "rewrite an existing stock record saving non-editables" +msgstr "重写现有库存记录,保存不可编辑数据" + +#: engine/core/docs/drf/viewsets.py:1221 +msgid "rewrite some fields of an existing stock record saving non-editables" +msgstr "重写现有库存记录的某些字段,保存不可编辑的内容" + +#: engine/core/docs/drf/viewsets.py:1231 +msgid "list all product tags (simple view)" +msgstr "列出所有产品标签(简单视图)" + +#: engine/core/docs/drf/viewsets.py:1238 +msgid "retrieve a single product tag (detailed view)" +msgstr "检索单个产品标签(详细视图)" + +#: engine/core/docs/drf/viewsets.py:1245 +msgid "create a product tag" +msgstr "创建产品标签" + +#: engine/core/docs/drf/viewsets.py:1252 +msgid "delete a product tag" +msgstr "删除产品标签" + +#: engine/core/docs/drf/viewsets.py:1259 +msgid "rewrite an existing product tag saving non-editables" +msgstr "重写现有产品标签,保存不可编辑内容" + +#: engine/core/docs/drf/viewsets.py:1266 +msgid "rewrite some fields of an existing product tag saving non-editables" +msgstr "重写现有产品标签的某些字段,保存不可编辑字段" + +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 +msgid "no search term provided." +msgstr "未提供搜索条件。" + +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 +msgid "Search" +msgstr "搜索" + +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 +msgid "UUID" +msgstr "UUID" + +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 +msgid "Name" +msgstr "名称" + +#: engine/core/filters.py:72 engine/core/filters.py:557 +msgid "Categories" +msgstr "类别" + +#: engine/core/filters.py:74 +msgid "Categories Slugs" +msgstr "类别 蛞蝓" + +#: engine/core/filters.py:75 engine/core/filters.py:436 +msgid "Tags" +msgstr "标签" + +#: engine/core/filters.py:76 +msgid "Min Price" +msgstr "最低价格" + +#: engine/core/filters.py:77 +msgid "Max Price" +msgstr "最高价格" + +#: engine/core/filters.py:78 +msgid "Is Active" +msgstr "处于活动状态" + +#: engine/core/filters.py:79 +msgid "Brand" +msgstr "品牌" + +#: engine/core/filters.py:80 +msgid "Attributes" +msgstr "属性" + +#: engine/core/filters.py:81 +msgid "Quantity" +msgstr "数量" + +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:489 engine/core/models.py:644 +msgid "Slug" +msgstr "蛞蝓" + +#: engine/core/filters.py:83 +msgid "Is Digital" +msgstr "是数字" + +#: engine/core/filters.py:84 +msgid "Include sub-categories" +msgstr "包括子类别" + +#: engine/core/filters.py:87 +msgid "Include personal ordered" +msgstr "包括个人订购的产品" + +#: engine/core/filters.py:89 engine/core/models.py:648 +msgid "SKU" +msgstr "商品编号" + +#: engine/core/filters.py:184 +msgid "there must be a category_uuid to use include_subcategories flag" +msgstr "必须有 category_uuid 才能使用 include_subcategories 标志" + +#: engine/core/filters.py:353 +msgid "Search (ID, product name or part number)" +msgstr "搜索(ID、产品名称或零件编号)" + +#: engine/core/filters.py:356 +msgid "Bought after (inclusive)" +msgstr "之后购买(含)" + +#: engine/core/filters.py:357 +msgid "Bought before (inclusive)" +msgstr "之前购买(含)" + +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 +msgid "User email" +msgstr "用户电子邮件" + +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 +msgid "User UUID" +msgstr "用户 UUID" + +#: engine/core/filters.py:362 +msgid "Status" +msgstr "现状" + +#: engine/core/filters.py:366 +msgid "Human Readable ID" +msgstr "人可读 ID" + +#: engine/core/filters.py:429 +msgid "Parent" +msgstr "家长" + +#: engine/core/filters.py:433 +msgid "Whole category(has at least 1 product or not)" +msgstr "整个类别(是否至少有 1 个产品)" + +#: engine/core/filters.py:437 +msgid "Level" +msgstr "级别" + +#: engine/core/filters.py:587 +msgid "Product UUID" +msgstr "产品 UUID" + +#: engine/core/graphene/mutations.py:40 +msgid "key to look for in or set into the cache" +msgstr "在缓存中查找或设置的关键字" + +#: engine/core/graphene/mutations.py:41 +msgid "data to store in cache" +msgstr "缓存中要存储的数据" + +#: engine/core/graphene/mutations.py:44 +msgid "timeout in seconds to set the data for into the cache" +msgstr "将数据设置为缓存的超时(以秒为单位" + +#: engine/core/graphene/mutations.py:47 +msgid "cached data" +msgstr "缓存数据" + +#: engine/core/graphene/mutations.py:62 +msgid "camelized JSON data from the requested URL" +msgstr "从请求的 URL 中获取驼峰化 JSON 数据" + +#: engine/core/graphene/mutations.py:67 engine/core/views.py:257 +msgid "only URLs starting with http(s):// are allowed" +msgstr "只允许使用以 http(s):// 开头的 URL" + +#: engine/core/graphene/mutations.py:83 +msgid "add a product to the order" +msgstr "在订单中添加产品" + +#: 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:110 engine/core/graphene/mutations.py:159 +msgid "remove a product from the order" +msgstr "从订单中删除产品" + +#: engine/core/graphene/mutations.py:137 +msgid "remove all products from the order" +msgstr "从订单中删除所有产品" + +#: engine/core/graphene/mutations.py:182 +msgid "buy an order" +msgstr "购买订单" + +#: 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: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:245 +msgid "perform an action on a list of products in the order" +msgstr "对订单中的产品列表执行操作" + +#: engine/core/graphene/mutations.py:250 +msgid "remove/add" +msgstr "删除/添加" + +#: 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:293 +msgid "perform an action on a list of products in the wishlist" +msgstr "对愿望清单中的产品列表执行操作" + +#: engine/core/graphene/mutations.py:311 +msgid "please provide wishlist_uuid value" +msgstr "请提供 `wishlist_uuid` 值。" + +#: 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:382 +msgid "add a product to the wishlist" +msgstr "在订单中添加产品" + +#: engine/core/graphene/mutations.py:410 +msgid "remove a product from the wishlist" +msgstr "从订单中删除产品" + +#: engine/core/graphene/mutations.py:438 +msgid "remove all products from the wishlist" +msgstr "从订单中删除产品" + +#: engine/core/graphene/mutations.py:466 +msgid "buy all products from the wishlist" +msgstr "从订单中删除产品" + +#: engine/core/graphene/mutations.py:510 +msgid "buy a product" +msgstr "购买订单" + +#: 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" + +#: engine/core/graphene/mutations.py:549 +msgid "add or delete a feedback for orderproduct" +msgstr "添加或删除订单产品的反馈信息" + +#: engine/core/graphene/mutations.py:573 +msgid "action must be either `add` or `remove`" +msgstr "操作必须是 \"添加 \"或 \"删除\"!" + +#: 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:582 +msgid "original address string provided by the user" +msgstr "用户提供的原始地址字符串" + +#: 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:715 +#, python-brace-format +msgid "{name} does not exist: {uuid}" +msgstr "{name} 不存在:{uuid}!" + +#: engine/core/graphene/mutations.py:632 +msgid "limit must be between 1 and 10" +msgstr "限值必须在 1 和 10 之间" + +#: engine/core/graphene/mutations.py:681 +msgid "elasticsearch - works like a charm" +msgstr "ElasticSearch - 工作起来得心应手" + +#: 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:95 +msgid "grouped attributes" +msgstr "分组属性" + +#: engine/core/graphene/object_types.py:102 +msgid "groups of attributes" +msgstr "属性组" + +#: 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:124 engine/core/models.py:503 +msgid "brands" +msgstr "品牌" + +#: engine/core/graphene/object_types.py:195 +msgid "category image url" +msgstr "类别" + +#: 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:199 +msgid "which attributes and values can be used for filtering this category." +msgstr "哪些属性和值可用于筛选该类别。" + +#: 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:205 +msgid "tags for this category" +msgstr "此类别的标签" + +#: engine/core/graphene/object_types.py:206 +msgid "products in this category" +msgstr "该类别中的产品" + +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 +msgid "vendors" +msgstr "供应商" + +#: engine/core/graphene/object_types.py:328 +msgid "Latitude (Y coordinate)" +msgstr "纬度(Y 坐标)" + +#: engine/core/graphene/object_types.py:329 +msgid "Longitude (X coordinate)" +msgstr "经度(X 坐标)" + +#: engine/core/graphene/object_types.py:358 +msgid "comment" +msgstr "如何" + +#: 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:366 +msgid "represents feedback from a user." +msgstr "代表用户的反馈意见。" + +#: 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:372 +msgid "download url for this order product if applicable" +msgstr "此订单产品的下载网址(如适用" + +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736 +msgid "feedback" +msgstr "反馈意见" + +#: engine/core/graphene/object_types.py:407 +msgid "a list of order products in this order" +msgstr "该订单中的订单产品列表" + +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214 +msgid "billing address" +msgstr "账单地址" + +#: 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:414 +msgid "total price of this order" +msgstr "订单总价" + +#: engine/core/graphene/object_types.py:415 +msgid "total quantity of products in order" +msgstr "订单中产品的总数量" + +#: engine/core/graphene/object_types.py:416 +msgid "are all products in the order digital" +msgstr "订单中的所有产品都是数字产品吗?" + +#: engine/core/graphene/object_types.py:419 +msgid "transactions for this order" +msgstr "此订单的交易" + +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278 +msgid "orders" +msgstr "订单" + +#: engine/core/graphene/object_types.py:459 +msgid "image url" +msgstr "图片 URL" + +#: engine/core/graphene/object_types.py:466 +msgid "product's images" +msgstr "产品图片" + +#: 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:475 engine/core/models.py:1737 +msgid "feedbacks" +msgstr "反馈意见" + +#: 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:477 engine/core/models.py:106 +msgid "attribute groups" +msgstr "属性组" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:109 +msgid "price" +msgstr "价格" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:108 +msgid "quantity" +msgstr "数量" + +#: engine/core/graphene/object_types.py:480 +msgid "number of feedbacks" +msgstr "反馈数量" + +#: engine/core/graphene/object_types.py:481 +msgid "only available for personal orders" +msgstr "仅限个人订购的产品" + +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "折扣价" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:658 +msgid "products" +msgstr "产品" + +#: engine/core/graphene/object_types.py:611 +msgid "promocodes" +msgstr "促销代码" + +#: engine/core/graphene/object_types.py:621 +msgid "products on sale" +msgstr "销售产品" + +#: engine/core/graphene/object_types.py:628 engine/core/models.py:904 +msgid "promotions" +msgstr "促销活动" + +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 +msgid "vendor" +msgstr "供应商" + +#: 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 +#: engine/core/templates/shipped_order_delivered_email.html:107 +msgid "product" +msgstr "产品" + +#: engine/core/graphene/object_types.py:644 engine/core/models.py:927 +msgid "wishlisted products" +msgstr "心愿单上的产品" + +#: engine/core/graphene/object_types.py:650 engine/core/models.py:944 +msgid "wishlists" +msgstr "愿望清单" + +#: engine/core/graphene/object_types.py:654 +msgid "tagged products" +msgstr "标签产品" + +#: 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:665 +msgid "tagged categories" +msgstr "标签类别" + +#: engine/core/graphene/object_types.py:672 +msgid "categories tags" +msgstr "类别标签" + +#: engine/core/graphene/object_types.py:676 +msgid "project name" +msgstr "项目名称" + +#: engine/core/graphene/object_types.py:677 +msgid "company name" +msgstr "公司名称" + +#: engine/core/graphene/object_types.py:678 +msgid "company address" +msgstr "公司地址" + +#: engine/core/graphene/object_types.py:679 +msgid "company phone number" +msgstr "公司电话号码" + +#: 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:681 +msgid "email host user" +msgstr "电子邮件主机用户" + +#: engine/core/graphene/object_types.py:682 +msgid "maximum amount for payment" +msgstr "最高付款额" + +#: engine/core/graphene/object_types.py:683 +msgid "minimum amount for payment" +msgstr "最低付款额" + +#: engine/core/graphene/object_types.py:684 +msgid "analytics data" +msgstr "分析数据" + +#: engine/core/graphene/object_types.py:685 +msgid "advertisement data" +msgstr "广告数据" + +#: engine/core/graphene/object_types.py:688 +msgid "company configuration" +msgstr "配置" + +#: engine/core/graphene/object_types.py:692 +msgid "language code" +msgstr "语言代码" + +#: engine/core/graphene/object_types.py:693 +msgid "language name" +msgstr "语言名称" + +#: engine/core/graphene/object_types.py:694 +msgid "language flag, if exists :)" +msgstr "语言标志(如果有):)" + +#: 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 +msgid "products search results" +msgstr "产品搜索结果" + +#: engine/core/graphene/object_types.py:731 +msgid "posts search results" +msgstr "产品搜索结果" + +#: engine/core/models.py:75 +msgid "" +"Represents a group of attributes, which can be hierarchical. This class is " +"used to manage and organize attribute groups. An attribute group can have a " +"parent group, forming a hierarchical structure. This can be useful for " +"categorizing and managing attributes more effectively in acomplex system." +msgstr "" +"代表一组属性,可以是分层的。该类用于管理和组织属性组。一个属性组可以有一个父组,从而形成一个层次结构。这有助于在复杂的系统中更有效地分类和管理属性。" + +#: engine/core/models.py:91 +msgid "parent of this group" +msgstr "本组家长" + +#: engine/core/models.py:92 +msgid "parent attribute group" +msgstr "父属性组" + +#: engine/core/models.py:96 engine/core/models.py:97 +msgid "attribute group's name" +msgstr "属性组名称" + +#: engine/core/models.py:105 engine/core/models.py:734 +msgid "attribute group" +msgstr "属性组" + +#: engine/core/models.py:111 +msgid "" +"Represents a vendor entity capable of storing information about external " +"vendors and their interaction requirements. The Vendor class is used to " +"define and manage information related to an external vendor. It stores the " +"vendor's name, authentication details required for communication, and the " +"percentage markup applied to products retrieved from the vendor. This model " +"also maintains additional metadata and constraints, making it suitable for " +"use in systems that interact with third-party vendors." +msgstr "" +"代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约束,使其适用于与第三方供应商交互的系统。" + +#: engine/core/models.py:124 +msgid "stores credentials and endpoints required for vendor communication" +msgstr "存储供应商应用程序接口通信所需的凭证和端点" + +#: engine/core/models.py:125 +msgid "authentication info" +msgstr "认证信息" + +#: engine/core/models.py:130 +msgid "define the markup for products retrieved from this vendor" +msgstr "定义从该供应商获取的产品的标记" + +#: engine/core/models.py:131 +msgid "vendor markup percentage" +msgstr "供应商加价百分比" + +#: engine/core/models.py:135 +msgid "name of this vendor" +msgstr "供应商名称" + +#: engine/core/models.py:136 +msgid "vendor name" +msgstr "供应商名称" + +#: engine/core/models.py:147 +msgid "response file" +msgstr "回复文件" + +#: engine/core/models.py:148 +msgid "vendor's last processing response" +msgstr "供应商最后的处理回复" + +#: engine/core/models.py:154 +msgid "vendor's integration file path" +msgstr "供应商的集成文件路径" + +#: engine/core/models.py:155 +msgid "integration path" +msgstr "整合路径" + +#: engine/core/models.py:197 +msgid "" +"Represents a product tag used for classifying or identifying products. The " +"ProductTag class is designed to uniquely identify and classify products " +"through a combination of an internal tag identifier and a user-friendly " +"display name. It supports operations exported through mixins and provides " +"metadata customization for administrative purposes." +msgstr "" +"代表用于分类或识别产品的产品标签。ProductTag " +"类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。" + +#: engine/core/models.py:209 engine/core/models.py:240 +msgid "internal tag identifier for the product tag" +msgstr "产品标签的内部标签标识符" + +#: engine/core/models.py:210 engine/core/models.py:241 +msgid "tag name" +msgstr "标签名称" + +#: engine/core/models.py:214 engine/core/models.py:245 +msgid "user-friendly name for the product tag" +msgstr "方便用户使用的产品标签名称" + +#: engine/core/models.py:215 engine/core/models.py:246 +msgid "tag display name" +msgstr "标签显示名称" + +#: engine/core/models.py:223 +msgid "product tag" +msgstr "产品标签" + +#: engine/core/models.py:229 +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 "代表用于产品的类别标签。该类是类别标签的模型,可用于关联和分类产品。它包括内部标签标识符和用户友好显示名称的属性。" + +#: engine/core/models.py:254 +msgid "category tag" +msgstr "类别标签" + +#: engine/core/models.py:255 engine/core/models.py:327 +msgid "category tags" +msgstr "类别标签" + +#: engine/core/models.py:260 +msgid "" +"Represents a category entity to organize and group related items in a " +"hierarchical structure. Categories may have hierarchical relationships with " +"other categories, supporting parent-child relationships. The class includes " +"fields for metadata and visual representation, which serve as a foundation " +"for category-related features. This class is typically used to define and " +"manage product categories or other similar groupings within an application, " +"allowing users or administrators to specify the name, description, and " +"hierarchy of categories, as well as assign attributes like images, tags, or " +"priority." +msgstr "" +"代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" + +#: engine/core/models.py:274 +msgid "upload an image representing this category" +msgstr "上传代表该类别的图片" + +#: engine/core/models.py:277 +msgid "category image" +msgstr "类别 图像" + +#: engine/core/models.py:282 +msgid "define a markup percentage for products in this category" +msgstr "定义该类别产品的加价百分比" + +#: engine/core/models.py:291 +msgid "parent of this category to form a hierarchical structure" +msgstr "该类别的父类别,形成等级结构" + +#: engine/core/models.py:292 +msgid "parent category" +msgstr "父类" + +#: engine/core/models.py:297 +msgid "category name" +msgstr "类别名称" + +#: engine/core/models.py:298 +msgid "provide a name for this category" +msgstr "提供该类别的名称" + +#: engine/core/models.py:305 +msgid "add a detailed description for this category" +msgstr "为该类别添加详细说明" + +#: engine/core/models.py:306 +msgid "category description" +msgstr "类别说明" + +#: engine/core/models.py:326 +msgid "tags that help describe or group this category" +msgstr "有助于描述或归类该类别的标签" + +#: engine/core/models.py:333 engine/core/models.py:495 +msgid "priority" +msgstr "优先权" + +#: engine/core/models.py:438 +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." +msgstr "" +"代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" + +#: engine/core/models.py:448 +msgid "name of this brand" +msgstr "品牌名称" + +#: engine/core/models.py:449 +msgid "brand name" +msgstr "品牌名称" + +#: engine/core/models.py:456 +msgid "upload a logo representing this brand" +msgstr "上传代表该品牌的徽标" + +#: engine/core/models.py:458 +msgid "brand small image" +msgstr "品牌小形象" + +#: engine/core/models.py:464 +msgid "upload a big logo representing this brand" +msgstr "上传代表该品牌的大徽标" + +#: engine/core/models.py:466 +msgid "brand big image" +msgstr "品牌大形象" + +#: engine/core/models.py:471 +msgid "add a detailed description of the brand" +msgstr "添加品牌的详细描述" + +#: engine/core/models.py:472 +msgid "brand description" +msgstr "品牌描述" + +#: engine/core/models.py:477 +msgid "optional categories that this brand is associated with" +msgstr "与该品牌相关的可选类别" + +#: engine/core/models.py:478 +msgid "associated categories" +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 " +"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 " +"和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" + +#: engine/core/models.py:520 +msgid "the vendor supplying this product stock" +msgstr "提供该产品库存的供应商" + +#: engine/core/models.py:521 +msgid "associated vendor" +msgstr "相关供应商" + +#: engine/core/models.py:525 +msgid "final price to the customer after markups" +msgstr "加价后给客户的最终价格" + +#: engine/core/models.py:526 +msgid "selling price" +msgstr "销售价格" + +#: engine/core/models.py:531 +msgid "the product associated with this stock entry" +msgstr "与该库存条目相关的产品" + +#: engine/core/models.py:532 engine/core/models.py:797 +#: engine/core/models.py:843 engine/core/models.py:1792 +msgid "associated product" +msgstr "相关产品" + +#: engine/core/models.py:539 +msgid "the price paid to the vendor for this product" +msgstr "为该产品支付给供应商的价格" + +#: engine/core/models.py:540 +msgid "vendor purchase price" +msgstr "供应商购买价格" + +#: engine/core/models.py:544 +msgid "available quantity of the product in stock" +msgstr "产品的可用库存量" + +#: engine/core/models.py:545 +msgid "quantity in stock" +msgstr "库存数量" + +#: engine/core/models.py:549 +msgid "vendor-assigned SKU for identifying the product" +msgstr "供应商指定的 SKU,用于识别产品" + +#: engine/core/models.py:550 +msgid "vendor sku" +msgstr "供应商 SKU" + +#: engine/core/models.py:556 +msgid "digital file associated with this stock if applicable" +msgstr "与该库存相关的数字文件(如适用" + +#: engine/core/models.py:557 +msgid "digital file" +msgstr "数字文件" + +#: engine/core/models.py:560 +msgid "system attributes" +msgstr "系统属性" + +#: engine/core/models.py:567 +msgid "stock entries" +msgstr "库存条目" + +#: engine/core/models.py:572 +msgid "" +"Represents a product with attributes such as category, brand, tags, digital " +"status, name, description, part number, and slug. Provides related utility " +"properties to retrieve ratings, feedback counts, price, quantity, and total " +"orders. Designed for use in a system that handles e-commerce or inventory " +"management. This class interacts with related models (such as Category, " +"Brand, and ProductTag) and manages caching for frequently accessed " +"properties to improve performance. It is used to define and manipulate " +"product data and its associated information within an application." +msgstr "" +"代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" +" ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" + +#: engine/core/models.py:585 +msgid "category this product belongs to" +msgstr "该产品所属类别" + +#: engine/core/models.py:594 +msgid "optionally associate this product with a brand" +msgstr "可选择将该产品与某个品牌联系起来" + +#: engine/core/models.py:600 +msgid "tags that help describe or group this product" +msgstr "有助于描述或归类该产品的标签" + +#: engine/core/models.py:605 +msgid "indicates whether this product is digitally delivered" +msgstr "表示该产品是否以数字方式交付" + +#: engine/core/models.py:606 +msgid "is product digital" +msgstr "产品是否数字化" + +#: engine/core/models.py:612 +msgid "provide a clear identifying name for the product" +msgstr "为产品提供一个明确的标识名称" + +#: engine/core/models.py:613 +msgid "product name" +msgstr "产品名称" + +#: engine/core/models.py:619 engine/core/models.py:892 +msgid "add a detailed description of the product" +msgstr "添加产品的详细描述" + +#: engine/core/models.py:620 +msgid "product description" +msgstr "产品说明" + +#: engine/core/models.py:627 +msgid "part number for this product" +msgstr "该产品的零件编号" + +#: engine/core/models.py:628 +msgid "part number" +msgstr "部件编号" + +#: engine/core/models.py:647 +msgid "stock keeping unit for this product" +msgstr "该产品的库存单位" + +#: engine/core/models.py:720 +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 " +"for dynamic and flexible data structuring." +msgstr "" +"代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" + +#: engine/core/models.py:733 +msgid "group of this attribute" +msgstr "该属性的组" + +#: engine/core/models.py:739 +msgid "string" +msgstr "字符串" + +#: engine/core/models.py:740 +msgid "integer" +msgstr "整数" + +#: engine/core/models.py:741 +msgid "float" +msgstr "浮动" + +#: engine/core/models.py:742 +msgid "boolean" +msgstr "布尔型" + +#: engine/core/models.py:743 +msgid "array" +msgstr "阵列" + +#: engine/core/models.py:744 +msgid "object" +msgstr "对象" + +#: engine/core/models.py:746 +msgid "type of the attribute's value" +msgstr "属性值的类型" + +#: engine/core/models.py:747 +msgid "value type" +msgstr "价值类型" + +#: engine/core/models.py:752 +msgid "name of this attribute" +msgstr "该属性的名称" + +#: engine/core/models.py:753 +msgid "attribute's name" +msgstr "属性名称" + +#: engine/core/models.py:758 +msgid "is filterable" +msgstr "可过滤" + +#: engine/core/models.py:759 +msgid "designates whether this attribute can be used for filtering or not" +msgstr "指定该属性是否可用于筛选" + +#: engine/core/models.py:771 engine/core/models.py:789 +#: engine/core/templates/digital_order_delivered_email.html:134 +msgid "attribute" +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 "代表与产品相关联的属性的特定值。它将 \"属性 \"与唯一的 \"值 \"联系起来,从而更好地组织和动态呈现产品特征。" + +#: engine/core/models.py:788 +msgid "attribute of this value" +msgstr "该值的属性" + +#: engine/core/models.py:796 +msgid "the specific product associated with this attribute's value" +msgstr "与该属性值相关的特定产品" + +#: engine/core/models.py:802 +msgid "the specific value for this attribute" +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 " +"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" +msgstr "为图像提供替代文字,以便于访问" + +#: engine/core/models.py:827 +msgid "image alt text" +msgstr "图片 alt 文本" + +#: engine/core/models.py:830 +msgid "upload the image file for this product" +msgstr "上传该产品的图片文件" + +#: engine/core/models.py:831 engine/core/models.py:862 +msgid "product image" +msgstr "产品图片" + +#: engine/core/models.py:836 +msgid "determines the order in which images are displayed" +msgstr "确定图像的显示顺序" + +#: engine/core/models.py:837 +msgid "display priority" +msgstr "显示优先级" + +#: engine/core/models.py:842 +msgid "the product that this image represents" +msgstr "该图片所代表的产品" + +#: engine/core/models.py:863 +msgid "product images" +msgstr "产品图片" + +#: engine/core/models.py:868 +msgid "" +"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." +msgstr "" +"代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" + +#: engine/core/models.py:880 +msgid "percentage discount for the selected products" +msgstr "所选产品的折扣百分比" + +#: engine/core/models.py:881 +msgid "discount percentage" +msgstr "折扣百分比" + +#: engine/core/models.py:886 +msgid "provide a unique name for this promotion" +msgstr "为该促销活动提供一个独特的名称" + +#: engine/core/models.py:887 +msgid "promotion name" +msgstr "推广名称" + +#: engine/core/models.py:893 +msgid "promotion description" +msgstr "促销说明" + +#: engine/core/models.py:898 +msgid "select which products are included in this promotion" +msgstr "选择促销活动包括哪些产品" + +#: engine/core/models.py:899 +msgid "included products" +msgstr "包括产品" + +#: engine/core/models.py:903 +msgid "promotion" +msgstr "促销活动" + +#: engine/core/models.py:914 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"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 "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" + +#: engine/core/models.py:926 +msgid "products that the user has marked as wanted" +msgstr "用户标记为想要的产品" + +#: engine/core/models.py:934 +msgid "user who owns this wishlist" +msgstr "拥有此愿望清单的用户" + +#: engine/core/models.py:935 +msgid "wishlist owner" +msgstr "心愿单所有者" + +#: engine/core/models.py:943 +msgid "wishlist" +msgstr "愿望清单" + +#: engine/core/models.py:985 +msgid "" +"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." +msgstr "" +"代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" + +#: engine/core/models.py:998 +msgid "documentary" +msgstr "纪录片" + +#: engine/core/models.py:999 +msgid "documentaries" +msgstr "纪录片" + +#: engine/core/models.py:1009 +msgid "unresolved" +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." +msgstr "" +"代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" +" API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" + +#: engine/core/models.py:1029 +msgid "address line for the customer" +msgstr "客户地址栏" + +#: engine/core/models.py:1030 +msgid "address line" +msgstr "地址栏" + +#: engine/core/models.py:1032 +msgid "street" +msgstr "街道" + +#: engine/core/models.py:1033 +msgid "district" +msgstr "地区" + +#: engine/core/models.py:1034 +msgid "city" +msgstr "城市" + +#: engine/core/models.py:1035 +msgid "region" +msgstr "地区" + +#: engine/core/models.py:1036 +msgid "postal code" +msgstr "邮政编码" + +#: engine/core/models.py:1037 +msgid "country" +msgstr "国家" + +#: engine/core/models.py:1044 +msgid "geolocation point: (longitude, latitude)" +msgstr "地理位置点(经度、纬度)" + +#: engine/core/models.py:1047 +msgid "full JSON response from geocoder for this address" +msgstr "地理编码器对此地址的完整 JSON 响应" + +#: engine/core/models.py:1052 +msgid "stored JSON response from the geocoding service" +msgstr "存储的来自地理编码服务的 JSON 响应" + +#: engine/core/models.py:1060 +msgid "address" +msgstr "地址" + +#: engine/core/models.py:1061 +msgid "addresses" +msgstr "地址" + +#: engine/core/models.py:1073 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " +"类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" + +#: engine/core/models.py:1087 +msgid "unique code used by a user to redeem a discount" +msgstr "用户用于兑换折扣的唯一代码" + +#: engine/core/models.py:1088 +msgid "promo code identifier" +msgstr "促销代码标识符" + +#: engine/core/models.py:1095 +msgid "fixed discount amount applied if percent is not used" +msgstr "如果不使用百分比,则使用固定折扣额" + +#: engine/core/models.py:1096 +msgid "fixed discount amount" +msgstr "固定折扣额" + +#: engine/core/models.py:1102 +msgid "percentage discount applied if fixed amount is not used" +msgstr "未使用固定金额时适用的折扣百分比" + +#: engine/core/models.py:1103 +msgid "percentage discount" +msgstr "折扣百分比" + +#: engine/core/models.py:1108 +msgid "timestamp when the promocode expires" +msgstr "促销代码过期的时间戳" + +#: engine/core/models.py:1109 +msgid "end validity time" +msgstr "结束有效时间" + +#: engine/core/models.py:1114 +msgid "timestamp from which this promocode is valid" +msgstr "该促销代码有效的时间戳" + +#: engine/core/models.py:1115 +msgid "start validity time" +msgstr "开始有效时间" + +#: engine/core/models.py:1120 +msgid "timestamp when the promocode was used, blank if not used yet" +msgstr "使用促销代码的时间戳,如果尚未使用,则留空" + +#: engine/core/models.py:1121 +msgid "usage timestamp" +msgstr "使用时间戳" + +#: engine/core/models.py:1126 +msgid "user assigned to this promocode if applicable" +msgstr "分配给此促销代码的用户(如适用" + +#: engine/core/models.py:1127 +msgid "assigned user" +msgstr "指定用户" + +#: engine/core/models.py:1134 +msgid "promo code" +msgstr "促销代码" + +#: engine/core/models.py:1135 +msgid "promo codes" +msgstr "促销代码" + +#: engine/core/models.py:1150 +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" +msgstr "促销代码已被使用" + +#: engine/core/models.py:1187 +#, python-brace-format +msgid "invalid discount type for promocode {self.uuid}" +msgstr "促销代码 {self.uuid} 的折扣类型无效!" + +#: engine/core/models.py:1196 +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 " +"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" +msgstr "该订单使用的账单地址" + +#: engine/core/models.py:1221 +msgid "optional promo code applied to this order" +msgstr "此订单可选择使用促销代码" + +#: engine/core/models.py:1222 +msgid "applied promo code" +msgstr "应用促销代码" + +#: engine/core/models.py:1230 +msgid "the shipping address used for this order" +msgstr "该订单使用的送货地址" + +#: engine/core/models.py:1231 +msgid "shipping address" +msgstr "送货地址" + +#: engine/core/models.py:1237 +msgid "current status of the order in its lifecycle" +msgstr "订单在其生命周期中的当前状态" + +#: engine/core/models.py:1238 +msgid "order status" +msgstr "订单状态" + +#: engine/core/models.py:1243 engine/core/models.py:1769 +msgid "json structure of notifications to display to users" +msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" + +#: engine/core/models.py:1249 +msgid "json representation of order attributes for this order" +msgstr "该订单属性的 JSON 表示形式" + +#: engine/core/models.py:1255 +msgid "the user who placed the order" +msgstr "下订单的用户" + +#: engine/core/models.py:1256 +msgid "user" +msgstr "用户" + +#: engine/core/models.py:1262 +msgid "the timestamp when the order was finalized" +msgstr "订单确定的时间戳" + +#: engine/core/models.py:1263 +msgid "buy time" +msgstr "购买时间" + +#: engine/core/models.py:1270 +msgid "a human-readable identifier for the order" +msgstr "订单的人工可读标识符" + +#: engine/core/models.py:1271 +msgid "human readable id" +msgstr "人类可读 ID" + +#: engine/core/models.py:1277 +msgid "order" +msgstr "订购" + +#: engine/core/models.py:1319 +msgid "a user must have only one pending order at a time" +msgstr "用户每次只能有一个挂单!" + +#: engine/core/models.py:1351 +msgid "you cannot add products to an order that is not a pending one" +msgstr "您不能向非待处理订单添加产品" + +#: engine/core/models.py:1356 +msgid "you cannot add inactive products to order" +msgstr "您不能在订单中添加非活动产品" + +#: engine/core/models.py:1373 +msgid "you cannot add more products than available in stock" +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 "您不能从非待处理订单中删除产品" + +#: engine/core/models.py:1416 +#, python-brace-format +msgid "{name} does not exist with query <{query}>" +msgstr "查询 <{query}> 时,{name} 不存在!" + +#: engine/core/models.py:1448 +msgid "promocode does not exist" +msgstr "促销代码不存在" + +#: engine/core/models.py:1454 +msgid "you can only buy physical products with shipping address specified" +msgstr "您只能购买指定送货地址的实物产品!" + +#: engine/core/models.py:1473 +msgid "address does not exist" +msgstr "地址不存在" + +#: 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 "您现在无法购买,请稍后再试。" + +#: engine/core/models.py:1497 engine/core/models.py:1559 +msgid "invalid force value" +msgstr "力值无效" + +#: engine/core/models.py:1503 engine/core/models.py:1566 +msgid "you cannot purchase an empty order!" +msgstr "您不能购买空单!" + +#: engine/core/models.py:1522 +msgid "you cannot buy an order without a user" +msgstr "没有用户就无法购买订单!" + +#: engine/core/models.py:1536 +msgid "a user without a balance cannot buy with balance" +msgstr "没有余额的用户不能使用余额购买!" + +#: engine/core/models.py:1541 +msgid "insufficient funds to complete the order" +msgstr "资金不足,无法完成订单" + +#: engine/core/models.py:1575 +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 "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" + +#: engine/core/models.py:1699 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class 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" +msgstr "用户提供的产品使用体验评论" + +#: engine/core/models.py:1712 +msgid "feedback comments" +msgstr "反馈意见" + +#: engine/core/models.py:1719 +msgid "" +"references the specific product in an order that this feedback is about" +msgstr "引用该反馈意见涉及的订单中的具体产品" + +#: engine/core/models.py:1720 +msgid "related order product" +msgstr "相关订购产品" + +#: engine/core/models.py:1725 +msgid "user-assigned rating for the product" +msgstr "用户对产品的评分" + +#: engine/core/models.py:1726 +msgid "product rating" +msgstr "产品评级" + +#: engine/core/models.py:1742 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"代表与订单及其属性相关联的产品。OrderProduct " +"模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" +" URL。该模型与订单和产品模型集成,并存储对它们的引用。" + +#: engine/core/models.py:1757 +msgid "the price paid by the customer for this product at purchase time" +msgstr "客户购买该产品时支付的价格" + +#: engine/core/models.py:1758 +msgid "purchase price at order time" +msgstr "订购时的购买价格" + +#: engine/core/models.py:1763 +msgid "internal comments for admins about this ordered product" +msgstr "管理员对该订购产品的内部评论" + +#: engine/core/models.py:1764 +msgid "internal comments" +msgstr "内部意见" + +#: engine/core/models.py:1770 +msgid "user notifications" +msgstr "用户通知" + +#: engine/core/models.py:1775 +msgid "json representation of this item's attributes" +msgstr "该项属性的 JSON 表示形式" + +#: engine/core/models.py:1776 +msgid "ordered product attributes" +msgstr "有序的产品属性" + +#: engine/core/models.py:1781 +msgid "reference to the parent order that contains this product" +msgstr "对包含该产品的父订单的引用" + +#: engine/core/models.py:1782 +msgid "parent order" +msgstr "父顺序" + +#: engine/core/models.py:1791 +msgid "the specific product associated with this order line" +msgstr "与该订单项目相关的具体产品" + +#: engine/core/models.py:1798 +msgid "quantity of this specific product in the order" +msgstr "订单中该特定产品的数量" + +#: engine/core/models.py:1799 +msgid "product quantity" +msgstr "产品数量" + +#: engine/core/models.py:1806 +msgid "current status of this product in the order" +msgstr "订单中该产品的当前状态" + +#: engine/core/models.py:1807 +msgid "product line status" +msgstr "产品系列状态" + +#: engine/core/models.py:1872 +msgid "order product must have an order" +msgstr "订单产品必须有相关的订单!" + +#: engine/core/models.py:1874 +#, python-brace-format +msgid "wrong action specified for feedback: {action}" +msgstr "为反馈指定了错误的操作:{action}!" + +#: engine/core/models.py:1888 +msgid "you cannot feedback an order which is not received" +msgstr "您不能反馈未收到的订单" + +#: engine/core/models.py:1894 +msgid "name" +msgstr "名称" + +#: engine/core/models.py:1895 +msgid "URL of the integration" +msgstr "集成的 URL" + +#: engine/core/models.py:1896 +msgid "authentication credentials" +msgstr "认证证书" + +#: engine/core/models.py:1918 +msgid "you can only have one default CRM provider" +msgstr "只能有一个默认 CRM 提供商" + +#: engine/core/models.py:1928 +msgid "CRM" +msgstr "客户关系管理" + +#: engine/core/models.py:1929 +msgid "CRMs" +msgstr "客户关系管理" + +#: engine/core/models.py:1941 +msgid "order CRM link" +msgstr "订单的客户关系管理链接" + +#: engine/core/models.py:1942 +msgid "orders CRM links" +msgstr "订单的客户关系管理链接" + +#: engine/core/models.py:1947 +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." +msgstr "" +"代表与订单相关的数字资产的下载功能。DigitalAssetDownload " +"类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" +" URL 的方法。" + +#: engine/core/models.py:1961 +msgid "download" +msgstr "下载" + +#: engine/core/models.py:1962 +msgid "downloads" +msgstr "下载" + +#: engine/core/serializers/utility.py:89 +msgid "" +"you must provide a comment, rating, and order product uuid to add feedback." +msgstr "您必须提供评论、评级和订单产品 uuid 才能添加反馈。" + +#: engine/core/sitemaps.py:25 +msgid "Home" +msgstr "首页" + +#: engine/core/sitemaps.py:30 +msgid "Contact Us" +msgstr "联系我们" + +#: engine/core/sitemaps.py:35 +msgid "About Us" +msgstr "关于我们" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:5 +msgid "Customers mix (30d)" +msgstr "客户组合 (30d)" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:10 +msgid "New customers" +msgstr "新客户" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:17 +msgid "Returning customers" +msgstr "回头客" + +#: engine/core/templates/admin/dashboard/_customers_mix.html:25 +msgid "No customer activity in the last 30 days." +msgstr "过去 30 天内没有客户活动。" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:5 +msgid "Daily sales" +msgstr "每日销售额" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:59 +msgid "Orders (FINISHED)" +msgstr "订单(已完成)" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:69 +msgid "Gross revenue" +msgstr "总收入" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:106 +#: engine/core/templates/admin/dashboard/_kpis.html:20 +msgid "Orders" +msgstr "订单" + +#: engine/core/templates/admin/dashboard/_daily_sales.html:113 +msgid "Gross" +msgstr "毛额" + +#: engine/core/templates/admin/dashboard/_header.html:3 +msgid "Dashboard" +msgstr "仪表板" + +#: engine/core/templates/admin/dashboard/_income_overview.html:7 +msgid "Income overview" +msgstr "收入概览" + +#: engine/core/templates/admin/dashboard/_income_overview.html:31 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Net" +msgstr "净收入" + +#: engine/core/templates/admin/dashboard/_income_overview.html:37 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Taxes" +msgstr "税收" + +#: engine/core/templates/admin/dashboard/_income_overview.html:43 +#: engine/core/templates/admin/dashboard/_income_overview.html:66 +msgid "Returns" +msgstr "返回" + +#: engine/core/templates/admin/dashboard/_income_overview.html:48 +msgid "Gross (pie total)" +msgstr "总收入" + +#: engine/core/templates/admin/dashboard/_income_overview.html:72 +msgid "No data" +msgstr "无日期" + +#: engine/core/templates/admin/dashboard/_kpis.html:6 +msgid "GMV" +msgstr "GMV" + +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" +msgstr "AOV" + +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" +msgstr "净收入" + +#: engine/core/templates/admin/dashboard/_kpis.html:62 +msgid "Refund rate" +msgstr "退款率" + +#: engine/core/templates/admin/dashboard/_kpis.html:73 +msgid "returned" +msgstr "已返回" + +#: engine/core/templates/admin/dashboard/_low_stock.html:5 +msgid "Low stock" +msgstr "低库存" + +#: engine/core/templates/admin/dashboard/_low_stock.html:29 +msgid "No low stock items." +msgstr "无低价商品。" + +#: engine/core/templates/admin/dashboard/_most_returned.html:5 +msgid "Most returned products (30d)" +msgstr "退货最多的产品 (30d)" + +#: engine/core/templates/admin/dashboard/_most_returned.html:24 +msgid "No returns in the last 30 days." +msgstr "最近 30 天内无退货。" + +#: engine/core/templates/admin/dashboard/_product_lists.html:6 +msgid "Most wished product" +msgstr "最希望的产品" + +#: engine/core/templates/admin/dashboard/_product_lists.html:33 +#: engine/core/templates/admin/dashboard/_product_lists.html:68 +msgid "No data yet." +msgstr "尚无数据。" + +#: engine/core/templates/admin/dashboard/_product_lists.html:41 +msgid "Most popular product" +msgstr "最受欢迎的产品" + +#: engine/core/templates/admin/dashboard/_quick_links.html:5 +msgid "Quick Links" +msgstr "快速链接" + +#: engine/core/templates/admin/dashboard/_quick_links.html:12 +msgid "No links available." +msgstr "没有链接。" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:5 +msgid "Shipped vs Digital (30d)" +msgstr "运输与数字 (30d)" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:10 +msgid "Digital" +msgstr "数字" + +#: engine/core/templates/admin/dashboard/_shipped_vs_digital.html:20 +msgid "Shipped" +msgstr "已发货" + +#: engine/core/templates/admin/dashboard/_top_categories.html:5 +msgid "Top categories by quantity (30d)" +msgstr "数量最多的类别 (30d)" + +#: engine/core/templates/admin/dashboard/_top_categories.html:23 +msgid "No category sales in the last 30 days." +msgstr "最近 30 天内无类别销售。" + +#: engine/core/templates/admin/index.html:9 +msgid "Django site admin" +msgstr "Django 网站管理员" + +#: 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 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 +msgid "order confirmation" +msgstr "订单确认" + +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 +msgid "logo" +msgstr "标志" + +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 +#, python-format +msgid "hello %(order.user.first_name)s," +msgstr "你好%(order.user.first_name)s_、" + +#: engine/core/templates/digital_order_created_email.html:102 +#, 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" +" order:" +msgstr "感谢您的订单 #%(order.pk)s!我们很高兴地通知您,我们已将您的订单付诸实施。以下是您的订单详情:" + +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 +msgid "total" +msgstr "总计" + +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 +msgid "total price" +msgstr "总价" + +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 +#, python-format +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 联系我们的支持人员。" + +#: engine/core/templates/digital_order_created_email.html:133 +#, python-format +msgid "best regards,
the %(config.PROJECT_NAME)s team" +msgstr "致以最诚挚的问候,
%(config.PROJECT_NAME)s_团队" + +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 +msgid "all rights reserved" +msgstr "保留所有权利" + +#: engine/core/templates/digital_order_delivered_email.html:99 +msgid "order delivered" +msgstr "订单已送达" + +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 +#, python-format +msgid "hello %(user_first_name)s," +msgstr "你好%(user_first_name)s_、" + +#: engine/core/templates/digital_order_delivered_email.html:101 +#, python-format +msgid "" +"we have successfully processed your order №%(order_uuid)s! below are the\n" +" details of your order:" +msgstr "我们已成功处理您的订单 №%(order_uuid)s_!以下是您的订单详情:" + +#: engine/core/templates/digital_order_delivered_email.html:128 +msgid "" +"additional\n" +" information" +msgstr "" +"其他\n" +" 附加信息" + +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 +msgid "value" +msgstr "价值" + +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 +#, python-format +msgid "" +"if you have any questions, feel free to contact our support at\n" +" %(contact_email)s." +msgstr "如果您有任何问题,请随时拨打 %(contact_email)s 联系我们的支持人员。" + +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 +#, python-format +msgid "best regards,
the %(project_name)s team" +msgstr "致以最诚挚的问候,
%(project_name)s_团队" + +#: engine/core/templates/json_table_widget.html:5 +msgid "key" +msgstr "钥匙" + +#: engine/core/templates/json_table_widget.html:40 +msgid "Add Row" +msgstr "添加行" + +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 +msgid "promocode granted" +msgstr "促销代码已授予" + +#: engine/core/templates/promocode_granted_email.html:101 +msgid "" +"Thank you for staying with us! We have granted you with a promocode\n" +" for " +msgstr "" +"感谢您的光临!我们为您提供了一个促销代码\n" +" 用于" + +#: 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" +" the details of your order:" +msgstr "感谢您的订购!我们很高兴确认您的购买。以下是您的订单详情:" + +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 +msgid "shipping price" +msgstr "运输价格" + +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 +msgid "your order will be delivered to the following address:" +msgstr "您的订单将送至以下地址:" + +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 +#, python-format +msgid "best regards,
The %(config.PROJECT_NAME)s team" +msgstr "致以最诚挚的问候,
%(config.PROJECT_NAME)s_团队" + +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 +msgid "" +"all rights\n" +" reserved" +msgstr "" +"版权所有\n" +" 保留所有权利" + +#: engine/core/utils/caching.py:44 +msgid "both data and timeout are required" +msgstr "需要数据和超时" + +#: engine/core/utils/caching.py:46 +msgid "invalid timeout value, it must be between 0 and 216000 seconds" +msgstr "超时值无效,必须介于 0 和 216000 秒之间" + +#: engine/core/utils/emailing.py:27 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | contact us initiated" +msgstr "{settings.PROJECT_NAME}| 联系我们" + +#: engine/core/utils/emailing.py:73 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order confirmation" +msgstr "{settings.PROJECT_NAME}| 订单确认" + +#: engine/core/utils/emailing.py:105 +#, python-brace-format +msgid "{settings.PROJECT_NAME} | order delivered" +msgstr "{settings.PROJECT_NAME} | 订单已送达" + +#: engine/core/utils/emailing.py:188 +#, python-brace-format +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." +msgstr "您没有执行此操作的权限。" + +#: engine/core/utils/nominatim.py:8 +msgid "NOMINATIM_URL must be configured." +msgstr "必须配置 NOMINATIM_URL 参数!" + +#: engine/core/validators.py:19 +#, 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} 像素!" + +#: engine/core/views.py:91 +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:106 +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:141 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "返回支持语言及其相应信息的列表。" + +#: engine/core/views.py:173 +msgid "Returns the parameters of the website as a JSON object." +msgstr "以 JSON 对象形式返回网站参数。" + +#: engine/core/views.py:192 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "处理缓存操作,如使用指定的键和超时读取和设置缓存数据。" + +#: engine/core/views.py:219 +msgid "Handles `contact us` form submissions." +msgstr "处理 \"联系我们 \"表单提交。" + +#: engine/core/views.py:240 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "处理来自传入 POST 请求的处理和验证 URL 的请求。" + +#: engine/core/views.py:280 +msgid "Handles global search queries." +msgstr "处理全局搜索查询。" + +#: engine/core/views.py:295 +msgid "Handles the logic of buying as a business without registration." +msgstr "处理未注册企业的购买逻辑。" + +#: engine/core/views.py:332 +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." +msgstr "" +"处理与订单相关的数字资产的下载。\n" +"此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" + +#: engine/core/views.py:343 +msgid "order_product_uuid is required" +msgstr "order_product_uuid 为必填项" + +#: engine/core/views.py:350 +msgid "order product does not exist" +msgstr "订单产品不存在" + +#: engine/core/views.py:353 +msgid "you can only download the digital asset once" +msgstr "您只能下载一次数字资产" + +#: engine/core/views.py:356 +msgid "the order must be paid before downloading the digital asset" +msgstr "在下载数字资产前必须支付订单费用" + +#: engine/core/views.py:362 +msgid "the order product does not have a product" +msgstr "订单产品没有产品" + +#: engine/core/views.py:399 +msgid "favicon not found" +msgstr "未找到 favicon" + +#: engine/core/views.py:404 +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." +msgstr "" +"处理网站的 favicon 请求。\n" +"该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" + +#: engine/core/views.py:416 +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 "" +"将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " +"`redirect` 函数来处理 HTTP 重定向。" + +#: engine/core/views.py:429 +msgid "Returns current version of the eVibes. " +msgstr "返回 eVibes 的当前版本。" + +#: engine/core/views.py:623 engine/core/views.py:636 +#, python-format +msgid "Revenue & Orders (last %(days)d)" +msgstr "" + +#: engine/core/views.py:793 +msgid "Returns custom variables for Dashboard. " +msgstr "返回 Dashboard 的自定义变量。" + +#: 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 " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"定义用于管理 Evibes 相关操作的视图集。EvibesViewSet 类继承于 ModelViewSet,提供了处理 Evibes " +"实体上的操作和运行的功能。它包括支持基于当前操作的动态序列化类、可定制的权限和渲染格式。" + +#: 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." +msgstr "" +"代表用于管理属性组对象的视图集。处理与 AttributeGroup 相关的操作,包括过滤、序列化和检索数据。该类是应用程序 API 层的一部分,为处理" +" AttributeGroup 数据的请求和响应提供了标准化方法。" + +#: 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 " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"在应用程序中处理与属性对象相关的操作。提供一组 API " +"端点,用于与属性数据交互。该类管理属性对象的查询、过滤和序列化,允许对返回的数据进行动态控制,例如根据请求按特定字段进行过滤或检索详细信息与简化信息。" + +#: 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." +msgstr "" +"用于管理 AttributeValue 对象的视图集。该视图集提供了用于列出、检索、创建、更新和删除 AttributeValue 对象的功能。它与 " +"Django REST 框架的视图集机制集成,并为不同的操作使用适当的序列化器。过滤功能通过 DjangoFilterBackend 提供。" + +#: 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 " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"管理类别相关操作的视图。CategoryViewSet " +"类负责处理系统中与类别模型相关的操作。它支持类别数据的检索、过滤和序列化。视图集还强制执行权限,确保只有授权用户才能访问特定数据。" + +#: 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 " +"端点的实现。" + +#: 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, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"管理与系统中的 \"产品 \"模型相关的操作。该类为管理产品提供了一个视图集,包括产品的筛选、序列化和对特定实例的操作。该类从 " +"`EvibesViewSet` 扩展而来,使用通用功能,并与 Django REST 框架集成,用于 RESTful API " +"操作。包括检索产品详细信息、应用权限和访问产品相关反馈的方法。" + +#: 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, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor " +"数据。它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 Django REST 框架提供对 Vendor 相关资源的简化访问。" + +#: 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 " +"use of Django's filtering system for querying data." +msgstr "" +"处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" +" `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。" + +#: 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 " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"用于管理订单和相关操作的 " +"ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet" +" 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" + +#: 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 " +"feedback on OrderProduct instances" +msgstr "" +"提供用于管理 OrderProduct 实体的视图集。该视图集可进行 CRUD 操作和特定于 OrderProduct " +"模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " +"实例的反馈信息" + +#: engine/core/viewsets.py:879 +msgid "Manages operations related to Product images in the application. " +msgstr "管理应用程序中与产品图像相关的操作。" + +#: 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:914 +msgid "Represents a view set for managing promotions. " +msgstr "代表用于管理促销活动的视图集。" + +#: engine/core/viewsets.py:927 +msgid "Handles operations related to Stock data in the system." +msgstr "处理系统中与库存数据有关的操作。" + +#: 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 " +"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 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" + +#: engine/core/viewsets.py:1056 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " +"HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" + +#: engine/core/viewsets.py:1123 +#, python-brace-format +msgid "Geocoding error: {e}" +msgstr "地理编码错误:{e}" + +#: engine/core/viewsets.py:1131 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"在应用程序中处理与产品标签相关的操作。该类提供了检索、筛选和序列化产品标签对象的功能。它支持使用指定的过滤后端对特定属性进行灵活过滤,并根据正在执行的操作动态使用不同的序列化器。" diff --git a/core/templatetags/__init__.py b/engine/core/management/__init__.py similarity index 100% rename from core/templatetags/__init__.py rename to engine/core/management/__init__.py diff --git a/engine/core/management/commands/__init__.py b/engine/core/management/commands/__init__.py new file mode 100644 index 00000000..21794264 --- /dev/null +++ b/engine/core/management/commands/__init__.py @@ -0,0 +1,42 @@ +from django.conf import settings + + +class RootDirectory: + def __init__(self) -> None: + self.label = "root" + self.path = settings.BASE_DIR / "evibes" + + +# Mapping from Django locale codes to DeepL API codes +DEEPL_TARGET_LANGUAGES_MAPPING = { + "ar-ar": "AR", + "cs-cz": "CS", + "da-dk": "DA", + "de-de": "DE", + "en-gb": "EN-GB", + "en-us": "EN-US", + "es-es": "ES", + "fa-ir": "unsupported", + "fr-fr": "FR", + "he-il": "HE", + "hi-in": "unsupported", + "hr-hr": "unsupported", + "id-id": "ID", + "it-it": "IT", + "ja-jp": "JA", + "kk-kz": "unsupported", + "ko-kr": "KO", + "nl-nl": "NL", + "no-no": "NB", + "pl-pl": "PL", + "pt-br": "PT-BR", + "ro-ro": "RO", + "ru-ru": "RU", + "sv-se": "SV", + "th-th": "TH", + "tr-tr": "TR", + "vi-vn": "VI", + "zh-hans": "ZH-HANS", +} + +TRANSLATABLE_APPS = ["core", "vibes_auth", "blog", "payments", "root"] diff --git a/core/management/commands/await_services.py b/engine/core/management/commands/await_services.py similarity index 72% rename from core/management/commands/await_services.py rename to engine/core/management/commands/await_services.py index 1eff88df..1686e034 100644 --- a/core/management/commands/await_services.py +++ b/engine/core/management/commands/await_services.py @@ -1,6 +1,7 @@ -import os import threading import time +from os import getenv +from typing import Any import redis from django.core.management.base import BaseCommand @@ -11,18 +12,18 @@ from redis.exceptions import ConnectionError # noqa: A004 class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write("Waiting for services...") - def wait_for_db(): + def wait_for_db() -> None: db_up = False while not db_up: try: conn = connect( - dbname=os.environ.get("POSTGRES_DB"), - user=os.environ.get("POSTGRES_USER"), - password=os.environ.get("POSTGRES_PASSWORD"), - host=os.environ.get("DB_HOST", "database"), + dbname=getenv("POSTGRES_DB"), + user=getenv("POSTGRES_USER"), + password=getenv("POSTGRES_PASSWORD"), + host=getenv("DB_HOST", "database"), ) conn.close() db_up = True @@ -31,15 +32,15 @@ class Command(BaseCommand): time.sleep(1) self.stdout.write(self.style.SUCCESS("Database available!")) - def wait_for_redis(): + def wait_for_redis() -> None: redis_up = False while not redis_up: try: connection = redis.StrictRedis( - host=os.environ.get("REDIS_HOST", "redis"), - port=int(os.environ.get("REDIS_PORT", 6379)), - db=int(os.environ.get("REDIS_DB", 0)), - password=os.environ.get("REDIS_PASSWORD", None), + host=getenv("REDIS_HOST", "redis"), + port=int(getenv("REDIS_PORT", 6379)), + db=int(getenv("REDIS_DB", 0)), + password=getenv("REDIS_PASSWORD", None), socket_timeout=5, retry_on_timeout=True, ) diff --git a/core/management/commands/check_translated.py b/engine/core/management/commands/check_translated.py similarity index 83% rename from core/management/commands/check_translated.py rename to engine/core/management/commands/check_translated.py index e0d93830..dee990dd 100644 --- a/core/management/commands/check_translated.py +++ b/engine/core/management/commands/check_translated.py @@ -1,13 +1,16 @@ import contextlib import os import re +from argparse import ArgumentParser from tempfile import NamedTemporaryFile +from typing import Any import polib from django.apps import apps +from django.conf import settings from django.core.management.base import BaseCommand, CommandError -from core.management.commands import RootDirectory +from engine.core.management.commands import RootDirectory, TRANSLATABLE_APPS # Patterns to identify placeholders PLACEHOLDER_REGEXES = [ @@ -39,7 +42,7 @@ def load_po_sanitized(path: str) -> polib.POFile: with open(path, encoding="utf-8") as f: text = f.read() except OSError as e: - raise CommandError(f"{path}: cannot read file ({e})") + raise CommandError(f"{path}: cannot read file ({e})") from e # fix fuzzy flags and empty header entries text = re.sub(r"^#,(?!\s)", "#, ", text, flags=re.MULTILINE) parts = text.split("\n\n", 1) @@ -54,7 +57,7 @@ def load_po_sanitized(path: str) -> polib.POFile: tmp.close() return polib.pofile(tmp.name) except Exception as e: - raise CommandError(f"{path}: syntax error after sanitization ({e})") + raise CommandError(f"{path}: syntax error after sanitization ({e})") from e finally: with contextlib.suppress(OSError): os.unlink(tmp.name) @@ -63,7 +66,7 @@ def load_po_sanitized(path: str) -> polib.POFile: class Command(BaseCommand): help = "Scan target-language .po files and report any placeholder mismatches, grouped by app." - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser) -> None: parser.add_argument( "-l", "--language", @@ -91,13 +94,20 @@ class Command(BaseCommand): help="Root path prefix to adjust file links", ) - def handle(self, *args, **options) -> None: - langs: list[str] = options["target_languages"] + def handle(self, *args: list[Any], **options: dict[str, str | list[str]]) -> None: + langs: list[str] = options.get("target_languages", []) # type: ignore [assignment] + if "ALL" in langs: + langs = list(dict(settings.LANGUAGES).keys()) apps_to_scan: set[str] = set(options["target_apps"]) - root_path: str = options.get("root_path") or "/app/" + if "ALL" in apps_to_scan: + apps_to_scan = set(TRANSLATABLE_APPS) + root_path: str = options.get("root_path") or "/app/" # type: ignore [assignment] configs = list(apps.get_app_configs()) - configs.append(RootDirectory()) + # noinspection PyTypeChecker + configs.append(RootDirectory()) # type: ignore [arg-type] + + errors = 0 for app_conf in configs: if app_conf.label not in apps_to_scan: @@ -142,6 +152,7 @@ class Command(BaseCommand): if app_issues: self.stdout.write(f"→ App: {app_conf.label}") for line in app_issues: + errors += 1 self.stdout.write(line) self.stdout.write("") else: @@ -150,3 +161,5 @@ class Command(BaseCommand): self.stdout.write("") self.stdout.write(self.style.SUCCESS("Done scanning.")) + if errors: + exit(1) diff --git a/core/management/commands/clear_unwanted.py b/engine/core/management/commands/clear_unwanted.py similarity index 80% rename from core/management/commands/clear_unwanted.py rename to engine/core/management/commands/clear_unwanted.py index 65d0d074..c82c8ef4 100644 --- a/core/management/commands/clear_unwanted.py +++ b/engine/core/management/commands/clear_unwanted.py @@ -1,22 +1,22 @@ from collections import defaultdict +from typing import Any from django.core.management.base import BaseCommand -from core.models import Category, Product, Stock +from engine.core.models import Category, Product, Stock class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Starting clearing unwanted data...")) # 1. Clean up duplicate Stock entries per product and vendor: # Group stocks by (product, vendor) stocks_by_group = defaultdict(list) for stock in Stock.objects.all().order_by("modified"): - key = (stock.product_id, stock.vendor) - stocks_by_group[key].append(stock) + stocks_by_group[stock.product_pk].append(stock) - stock_deletions = [] + stock_deletions: list[str] = [] for group in stocks_by_group.values(): if len(group) <= 1: continue @@ -32,20 +32,20 @@ class Command(BaseCommand): # Mark all stocks (except the designated one) for deletion. for s in group: - if s.id != record_to_keep.id: - stock_deletions.append(s.id) + if s.uuid != record_to_keep.uuid: + stock_deletions.append(str(s.uuid)) if stock_deletions: - Stock.objects.filter(id__in=stock_deletions).delete() + Stock.objects.filter(uuid__in=stock_deletions).delete() self.stdout.write(self.style.SUCCESS(f"Deleted {len(stock_deletions)} duplicate stock entries.")) # 2. Clean up duplicate Category entries based on name (case-insensitive) category_groups = defaultdict(list) for cat in Category.objects.all().order_by("modified"): - key = cat.name.lower() + key: str = cat.name.lower() category_groups[key].append(cat) - categories_to_delete = [] + categories_to_delete: list[str] = [] total_product_updates = 0 for cat_list in category_groups.values(): if len(cat_list) <= 1: @@ -59,13 +59,13 @@ class Command(BaseCommand): keep_category = max(cat_list, key=lambda c: c.modified) for duplicate in cat_list: - if duplicate.id == keep_category.id: + if duplicate.uuid == keep_category.uuid: continue total_product_updates += Product.objects.filter(category=duplicate).update(category=keep_category) - categories_to_delete.append(duplicate.id) + categories_to_delete.append(str(duplicate.uuid)) if categories_to_delete: - Category.objects.filter(id__in=categories_to_delete).delete() + Category.objects.filter(uuid__in=categories_to_delete).delete() self.stdout.write( self.style.SUCCESS( f"Replaced category for {total_product_updates} product(s) " @@ -74,7 +74,7 @@ class Command(BaseCommand): ) # 3. For Products without stocks: set is_active = False. - inactive_products = Product.objects.filter(stock__isnull=True) + inactive_products = Product.objects.filter(stocks__isnull=True) count_inactive = inactive_products.count() if count_inactive: inactive_products.update(is_active=False) diff --git a/core/management/commands/deepl_translate.py b/engine/core/management/commands/deepl_translate.py similarity index 74% rename from core/management/commands/deepl_translate.py rename to engine/core/management/commands/deepl_translate.py index d837715a..345a1648 100644 --- a/core/management/commands/deepl_translate.py +++ b/engine/core/management/commands/deepl_translate.py @@ -1,35 +1,16 @@ import os import re +from argparse import ArgumentParser +from os import getenv from tempfile import NamedTemporaryFile +from typing import Any import polib import requests from django.apps import apps from django.core.management.base import BaseCommand, CommandError -from core.management.commands import RootDirectory - -# Mapping from Django locale codes to DeepL API codes -DEEPL_TARGET_LANGUAGES_MAPPING = { - "en-gb": "EN-GB", - "ar-ar": "AR", - "cs-cz": "CS", - "da-dk": "DA", - "de-de": "DE", - "en-us": "EN-US", - "es-es": "ES", - "fr-fr": "FR", - "hi-in": "unsupported", - "it-it": "IT", - "ja-jp": "JA", - "kk-kz": "unsupported", - "nl-nl": "NL", - "pl-pl": "PL", - "pt-br": "PT-BR", - "ro-ro": "RO", - "ru-ru": "RU", - "zh-hans": "ZH-HANS", -} +from engine.core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS, RootDirectory # Patterns to identify placeholders PLACEHOLDER_REGEXES = [ @@ -45,7 +26,7 @@ def placeholderize(text: str) -> tuple[str, list[str]]: """ placeholders: list[str] = [] - def _repl(match: re.Match) -> str: + def _repl(match: re.Match) -> str: # type: ignore [type-arg] idx = len(placeholders) placeholders.append(match.group(0)) return f"__PH_{idx}__" @@ -99,7 +80,7 @@ def load_po_sanitized(path: str) -> polib.POFile | None: class Command(BaseCommand): help = "Merge msgid/msgstr from en_GB PO into target-language POs via DeepL, preserving placeholders." - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser) -> None: parser.add_argument( "-l", "--language", @@ -107,7 +88,7 @@ class Command(BaseCommand): action="append", required=True, metavar="LANG", - help="Locale code for translation, e.g. de-DE, fr-FR.", + help="Locale code for translation, e.g. de-DE, fr-FR. Use ALL to translate all languages.", ) parser.add_argument( "-a", @@ -116,16 +97,30 @@ class Command(BaseCommand): action="append", required=True, metavar="APP", - help="App label for translation, e.g. core, payments.", + help="App label for translation, e.g. core, payments. Use ALL to translate all apps.", ) - def handle(self, *args, **options) -> None: - target_langs: list[str] = options["target_languages"] - target_apps: set[str] = set(options["target_apps"]) - auth_key = os.environ.get("DEEPL_AUTH_KEY") + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + target_langs: list[str] = options["target_languages"] # type: ignore [assignment] + if "ALL" in target_langs: + target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys() # type: ignore [assignment] + target_apps = set(options["target_apps"]) + if "ALL" in target_apps: + target_apps = { + app_conf.label + for app_conf in list(apps.get_app_configs()) + [RootDirectory()] + if app_conf.label in TRANSLATABLE_APPS + } + auth_key = getenv("DEEPL_AUTH_KEY") if not auth_key: raise CommandError("DEEPL_AUTH_KEY not set") + # attempt to import readline for interactive fill + try: + import readline + except ImportError: + readline = None # type: ignore [assignment] + for target_lang in target_langs: api_code = DEEPL_TARGET_LANGUAGES_MAPPING.get(target_lang) if not api_code: @@ -137,8 +132,7 @@ class Command(BaseCommand): self.stdout.write(self.style.MIGRATE_HEADING(f"→ Translating into {target_lang}")) - configs = list(apps.get_app_configs()) - configs.append(RootDirectory()) + configs = list(apps.get_app_configs()) + [RootDirectory()] for app_conf in configs: if app_conf.label not in target_apps: @@ -151,7 +145,6 @@ class Command(BaseCommand): self.stdout.write(f"• {app_conf.label}: loading English PO…") en_po = load_po_sanitized(en_path) - if not en_po: raise CommandError(f"Failed to load en_GB PO for {app_conf.label}") @@ -159,11 +152,26 @@ class Command(BaseCommand): if missing: self.stdout.write(self.style.NOTICE(f"⚠️ {len(missing)} missing in en_GB")) for e in missing: - input_msgstr = input(f"Enter translation for '{e.msgid}': ").strip() - if input_msgstr: - e.msgstr = input_msgstr + default = e.msgid + if readline: + + def hook() -> None: + readline.insert_text(default) # type: ignore [attr-defined] # noqa: B023 + readline.redisplay() # type: ignore [attr-defined] + + readline.set_pre_input_hook(hook) # type: ignore [attr-defined] + + prompt = f"Enter translation for '{e.msgid}': " + user_in = input(prompt).strip() + + if readline: + readline.set_pre_input_hook(None) # type: ignore [attr-defined] + + if user_in: + e.msgstr = user_in else: e.msgstr = e.msgid + en_po.save(en_path) self.stdout.write(self.style.SUCCESS("Updated en_GB PO")) @@ -177,13 +185,13 @@ class Command(BaseCommand): "LC_MESSAGES", ) os.makedirs(tgt_dir, exist_ok=True) - tgt_path = os.path.join(tgt_dir, "django.po") + tgt_path = os.path.join(str(tgt_dir), "django.po") old_tgt = None if os.path.exists(tgt_path): self.stdout.write(f" loading existing {target_lang} PO…") try: - old_tgt = load_po_sanitized(tgt_path) + old_tgt = load_po_sanitized(str(tgt_path)) except Exception as e: self.stdout.write(self.style.WARNING(f"Existing PO parse error({e!s}), starting fresh")) @@ -212,8 +220,8 @@ class Command(BaseCommand): protected = [] maps: list[list[str]] = [] - for e in to_trans: - txt = source_map[e.msgid] + for entry in to_trans: + txt = source_map[entry.msgid] p_txt, p_map = placeholderize(txt) protected.append(p_txt) maps.append(p_map) @@ -227,16 +235,16 @@ class Command(BaseCommand): resp.raise_for_status() result = resp.json() except Exception as exc: - raise CommandError(f"DeepL error: {exc} – {resp.text}") + raise CommandError(f"DeepL error: {exc} – {resp.text}") from exc trans = result.get("translations", []) if len(trans) != len(to_trans): raise CommandError(f"Got {len(trans)} translations, expected {len(to_trans)}") - for e, obj, pmap in zip(to_trans, trans, maps, strict=True): - e.msgstr = deplaceholderize(obj["text"], pmap) + for entry, obj, pmap in zip(to_trans, trans, maps, strict=True): + entry.msgstr = deplaceholderize(obj["text"], pmap) - new_po.save(tgt_path) + new_po.save(str(tgt_path)) self.stdout.write(self.style.SUCCESS(f"Saved {tgt_path}")) self.stdout.write(self.style.SUCCESS("Done.")) diff --git a/engine/core/management/commands/delete_never_ordered_products.py b/engine/core/management/commands/delete_never_ordered_products.py new file mode 100644 index 00000000..5f6fe6ce --- /dev/null +++ b/engine/core/management/commands/delete_never_ordered_products.py @@ -0,0 +1,36 @@ +from argparse import ArgumentParser +from typing import Any + +from django.core.management.base import BaseCommand + +from engine.core.models import AttributeValue, Product, ProductImage + + +class Command(BaseCommand): + help = "Delete Product rows with no OrderProduct, in batches" + + def add_arguments(self, parser: ArgumentParser): + parser.add_argument( + "-s", + "--size", + required=False, + default=5000, + help="Chunk size to delete", + ) + + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + size: int = options["size"] # type: ignore [assignment] + while True: + batch_ids = list(Product.objects.filter(orderproduct__isnull=True).values_list("pk", flat=True)[:size]) + if not batch_ids: + break + try: + AttributeValue.objects.filter(product_id__in=batch_ids).delete() + ProductImage.objects.filter(product_id__in=batch_ids).delete() + Product.objects.filter(pk__in=batch_ids).delete() + except Exception as e: + self.stdout.write("Couldn't delete some of the products(will retry later): %s" % str(e)) + continue + self.stdout.write(f"Deleted {len(batch_ids)} products…") + + self.stdout.write("✅ All unordered products removed.") diff --git a/engine/core/management/commands/delete_products_by_description.py b/engine/core/management/commands/delete_products_by_description.py new file mode 100644 index 00000000..348e8781 --- /dev/null +++ b/engine/core/management/commands/delete_products_by_description.py @@ -0,0 +1,38 @@ +from argparse import ArgumentParser +from typing import Any + +from django.core.management.base import BaseCommand + +from engine.core.models import AttributeValue, Product, ProductImage + + +class Command(BaseCommand): + help = "Delete Product rows with special description, in batches" + + def add_arguments(self, parser: ArgumentParser) -> None: + parser.add_argument( + "-s", + "--size", + required=False, + default=5000, + help="Chunk size to delete", + ) + + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + size: int = options["size"] # type: ignore [assignment] + while True: + batch_ids = list( + Product.objects.filter(description__iexact="EVIBES_DELETED_PRODUCT").values_list("pk", flat=True)[:size] + ) + if not batch_ids: + break + try: + AttributeValue.objects.filter(product_id__in=batch_ids).delete() + ProductImage.objects.filter(product_id__in=batch_ids).delete() + Product.objects.filter(pk__in=batch_ids).delete() + except Exception as e: + self.stdout.write("Couldn't delete some of the products(will retry later): %s" % str(e)) + continue + self.stdout.write(f"Deleted {len(batch_ids)} products…") + + self.stdout.write("✅ All unordered products removed.") diff --git a/core/management/commands/fetch_products.py b/engine/core/management/commands/fetch_products.py similarity index 58% rename from core/management/commands/fetch_products.py rename to engine/core/management/commands/fetch_products.py index 3fff1b63..5c2c736f 100644 --- a/core/management/commands/fetch_products.py +++ b/engine/core/management/commands/fetch_products.py @@ -1,12 +1,14 @@ +from typing import Any + from django.core.management.base import BaseCommand -from core.tasks import update_products_task +from engine.core.tasks import update_products_task class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Starting fetching products task in worker container...")) - update_products_task.delay() + update_products_task.delay() # type: ignore [attr-defined] self.stdout.write(self.style.SUCCESS("Started fetching products task in worker container without errors!")) diff --git a/core/management/commands/fix_fuzzy.py b/engine/core/management/commands/fix_fuzzy.py similarity index 77% rename from core/management/commands/fix_fuzzy.py rename to engine/core/management/commands/fix_fuzzy.py index ce047e32..f0d5af60 100644 --- a/core/management/commands/fix_fuzzy.py +++ b/engine/core/management/commands/fix_fuzzy.py @@ -52,12 +52,22 @@ class Command(BaseCommand): new_lines.append("\n") continue - fuzzy_idx = next((i for i, line in enumerate(ent) if line.startswith("#,") and "fuzzy" in line), None) + if any( + line.startswith("#~") or (line.startswith("#,") and line.lstrip("#, ").startswith("msgid ")) + for line in ent + ): + changed = True + continue + + fuzzy_idx = next( + (i for i, line in enumerate(ent) if line.startswith("#,") and "fuzzy" in line), + None, + ) + if fuzzy_idx is not None: - flag_line = ent[fuzzy_idx] - remaining = [f.strip() for f in flag_line[2:].split(",") if f.strip() != "fuzzy"] - if remaining: - ent[fuzzy_idx] = "#, " + ", ".join(remaining) + "\n" + flags = [f.strip() for f in ent[fuzzy_idx][2:].split(",") if f.strip() != "fuzzy"] + if flags: + ent[fuzzy_idx] = "#, " + ", ".join(flags) + "\n" else: del ent[fuzzy_idx] @@ -75,4 +85,4 @@ class Command(BaseCommand): f.writelines(new_lines) self.stdout.write(self.style.SUCCESS(f" → Updated {filepath}")) else: - self.stdout.write(" (no fuzzy entries found)") + self.stdout.write(" (no changes)") diff --git a/core/management/commands/fix_prices.py b/engine/core/management/commands/fix_prices.py similarity index 74% rename from core/management/commands/fix_prices.py rename to engine/core/management/commands/fix_prices.py index 612d88ab..01b9e206 100644 --- a/core/management/commands/fix_prices.py +++ b/engine/core/management/commands/fix_prices.py @@ -1,21 +1,22 @@ import logging +from typing import Any from django.core.management.base import BaseCommand -from core.models import Product -from core.vendors import AbstractVendor +from engine.core.models import Product +from engine.core.vendors import AbstractVendor -logger = logging.getLogger("evibes") +logger = logging.getLogger(__name__) class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Starting fixing stocks' prices...")) for product in Product.objects.filter(stocks__isnull=False): for stock in product.stocks.all(): try: - stock.price = AbstractVendor.round_price_marketologically(stock.price) # type: ignore + stock.price = AbstractVendor.round_price_marketologically(stock.price) stock.save() except Exception as e: self.stdout.write(self.style.WARNING(f"Couldn't fix price on {stock.uuid}")) diff --git a/engine/core/management/commands/initialize.py b/engine/core/management/commands/initialize.py new file mode 100644 index 00000000..bdcda2f3 --- /dev/null +++ b/engine/core/management/commands/initialize.py @@ -0,0 +1,193 @@ +import logging +from datetime import datetime +from typing import Any + +from django.conf import settings +from django.contrib.auth.models import Permission +from django.core.management.base import BaseCommand +from django.db.models import Q + +from engine.core.models import Vendor +from engine.vibes_auth.models import Group, User + +logger = logging.getLogger(__name__) + +user_support_permissions = [ + "add_chatmessage", + "view_chatmessage", + "change_chatthread", + "view_chatthread", + "view_order", + "view_ordercrmlink", + "view_orderproduct", + "view_address", + "view_user", + "view_wishlist", + "view_balance", + "view_transaction", +] + +stock_manager_permissions = [ + "add_stock", + "change_stock", + "view_stock", + "add_category", + "change_category", + "view_category", + "add_brand", + "change_brand", + "view_brand", + "add_product", + "change_product", + "view_product", + "add_attribute", + "change_attribute", + "view_attribute", + "add_attributevalue", + "change_attributevalue", + "view_attributevalue", + "add_attributegroup", + "change_attributegroup", + "view_attributegroup", + "add_productimage", + "change_productimage", + "view_productimage", +] + +head_stock_manager_permissions = [ + *stock_manager_permissions, + "delete_brand", + "delete_category", + "delete_stock", + "delete_product", + "delete_attribute", + "delete_attributevalue", + "delete_attributegroup", + "delete_productimage", + "add_vendor", + "change_vendor", + "view_vendor", + "view_user", +] + +marketing_admin_permissions = [ + "view_feedback", + "delete_feedback", + "add_producttag", + "change_producttag", + "delete_producttag", + "view_producttag", + "add_categorytag", + "change_categorytag", + "delete_categorytag", + "view_categorytag", + "add_promocode", + "change_promocode", + "delete_promocode", + "view_promocode", + "add_promotion", + "change_promotion", + "delete_promotion", + "view_promotion", + "view_wishlist", + "add_post", + "change_post", + "delete_post", + "view_post", + "add_posttag", + "change_posttag", + "delete_posttag", + "view_posttag", + "add_attachment", + "change_attachment", + "delete_attachment", + "view_attachment", + "add_messageattachment", + "change_messageattachment", + "delete_messageattachment", + "view_messageattachment", +] + +e_commerce_admin_permissions = [ + *user_support_permissions, + *head_stock_manager_permissions, + *marketing_admin_permissions, + "delete_address", + "change_balance", + "delete_attachment", + "add_constance", + "change_constance", + "delete_constance", + "view_constance", + "change_config", + "view_config", + "add_gateway", + "change_gateway", + "delete_gateway", + "view_gateway", + "view_periodictask", + "view_periodictasks", + "change_user", + "view_group", +] + + +class Command(BaseCommand): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + self.stdout.write("Initializing must-have instances...") + + initialized_path = settings.BASE_DIR / ".initialized" + + stored_date: datetime | None = None + if initialized_path.exists(): + try: + content = initialized_path.read_text(encoding="utf-8").strip() + if content: + stored_date = datetime.fromisoformat(content) + except Exception as exc: + logger.warning("Failed to parse .initialized content: %s", exc) + + if stored_date is None: + stored_date = datetime.min + + if not (settings.RELEASE_DATE > stored_date): + self.stdout.write(self.style.WARNING("Initialization skipped: already up-to-date.")) + return + + Vendor.objects.get_or_create(name="INNER") + + user_support, is_user_support_created = Group.objects.get_or_create(name="User Support") + if is_user_support_created: + perms = Permission.objects.filter(codename__in=user_support_permissions) + user_support.permissions.add(*perms) + + stock_manager, is_stock_manager_created = Group.objects.get_or_create(name="Stock Manager") + if is_stock_manager_created: + perms = Permission.objects.filter(codename__in=stock_manager_permissions) + stock_manager.permissions.add(*perms) + + head_stock_manager, is_head_stock_manager_created = Group.objects.get_or_create(name="Head Stock Manager") + if is_head_stock_manager_created: + perms = Permission.objects.filter(codename__in=head_stock_manager_permissions) + head_stock_manager.permissions.add(*perms) + + marketing_admin, is_marketing_admin_created = Group.objects.get_or_create(name="Marketing Admin") + if is_marketing_admin_created: + perms = Permission.objects.filter(codename__in=marketing_admin_permissions) + marketing_admin.permissions.add(*perms) + + e_commerce_admin, is_e_commerce_admin_created = Group.objects.get_or_create(name="E-Commerce Admin") + if is_e_commerce_admin_created: + perms = Permission.objects.filter(codename__in=e_commerce_admin_permissions) + e_commerce_admin.permissions.add(*perms) + + valid_codes = [code for code, _ in settings.LANGUAGES] + (User.objects.filter(Q(language="") | ~Q(language__in=valid_codes)).update(language=settings.LANGUAGE_CODE)) + + try: + if not settings.DEBUG: + initialized_path.write_text(settings.RELEASE_DATE.isoformat(), encoding="utf-8") + except Exception as exc: + logger.error("Failed to update .initialized file: %s", exc) + + self.stdout.write(self.style.SUCCESS("Successfully initialized must-have instances!")) diff --git a/core/management/commands/rebuild_slugs.py b/engine/core/management/commands/rebuild_slugs.py similarity index 87% rename from core/management/commands/rebuild_slugs.py rename to engine/core/management/commands/rebuild_slugs.py index ba653c9f..ccc27f10 100644 --- a/core/management/commands/rebuild_slugs.py +++ b/engine/core/management/commands/rebuild_slugs.py @@ -1,15 +1,18 @@ +from typing import Any + from django.core.management.base import BaseCommand from django.db import transaction +from django.db.models import QuerySet from django.utils.crypto import get_random_string -from core.models import Brand, Category, Product +from engine.core.models import Brand, Category, Product # noinspection PyProtectedMember class Command(BaseCommand): help = "Rebuild slug field for all slugified instances" - def reset_em(self, queryset): + def reset_em(self, queryset: QuerySet[Any]) -> None: total = queryset.count() self.stdout.write(f"Starting slug rebuilding for {total} {queryset.model._meta.verbose_name_plural}") for idx, instance in enumerate(queryset.iterator(), start=1): @@ -35,7 +38,7 @@ class Command(BaseCommand): ) ) - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: for queryset in [ Brand.objects.all(), Category.objects.all(), diff --git a/core/management/commands/set_default_caches.py b/engine/core/management/commands/set_default_caches.py similarity index 65% rename from core/management/commands/set_default_caches.py rename to engine/core/management/commands/set_default_caches.py index 40722e6e..87198223 100644 --- a/core/management/commands/set_default_caches.py +++ b/engine/core/management/commands/set_default_caches.py @@ -1,10 +1,12 @@ +from typing import Any + from django.core.management.base import BaseCommand -from core.utils.caching import set_default_cache +from engine.core.utils.caching import set_default_cache class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Started setting default cache values...")) set_default_cache() diff --git a/core/management/commands/translate_fields.py b/engine/core/management/commands/translate_fields.py similarity index 85% rename from core/management/commands/translate_fields.py rename to engine/core/management/commands/translate_fields.py index d431ec81..2f3468bc 100644 --- a/core/management/commands/translate_fields.py +++ b/engine/core/management/commands/translate_fields.py @@ -1,32 +1,14 @@ import importlib -import os +from argparse import ArgumentParser +from os import getenv import requests from django.core.management.base import BaseCommand, CommandError from django.db import transaction -DEEPL_API_URL = "https://api.deepl.com/v2/translate" +from engine.core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING -DEEPL_TARGET_LANGUAGES_MAPPING = { - "en-gb": "EN-GB", - "ar-ar": "AR", - "cs-cz": "CS", - "da-dk": "DA", - "de-de": "DE", - "en-us": "EN-US", - "es-es": "ES", - "fr-fr": "FR", - "hi-in": "unsupported", - "it-it": "IT", - "ja-jp": "JA", - "kk-kz": "unsupported", - "nl-nl": "NL", - "pl-pl": "PL", - "pt-br": "PT-BR", - "ro-ro": "RO", - "ru-ru": "RU", - "zh-hans": "ZH-HANS", -} +DEEPL_API_URL = "https://api.deepl.com/v2/translate" class Command(BaseCommand): @@ -35,7 +17,7 @@ class Command(BaseCommand): "in the translated_ field created by django-modeltranslation." ) - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser) -> None: parser.add_argument( "-t", "--target", @@ -49,7 +31,7 @@ class Command(BaseCommand): help="Modeltranslation language code to translate into, e.g. de-de, fr-fr, zh-hans", ) - def handle(self, *args, **options): + def handle(self, *args, **options) -> None: target = options["target"] lang = options["language"].lower() @@ -61,16 +43,16 @@ class Command(BaseCommand): try: module_path, model_name, field_name = target.rsplit(".", 2) - except ValueError: + except ValueError as e: raise CommandError( "Invalid target format. Use app.module.Model.field, e.g. core.models.Product.description" - ) + ) from e try: module = importlib.import_module(module_path) model = getattr(module, model_name) except (ImportError, AttributeError) as e: - raise CommandError(f"Could not import model '{model_name}' from '{module_path}': {e}") + raise CommandError(f"Could not import model '{model_name}' from '{module_path}': {e}") from e dest_suffix = lang.replace("-", "_") dest_field = f"{field_name}_{dest_suffix}" @@ -81,7 +63,7 @@ class Command(BaseCommand): "Did you run makemigrations/migrate after setting up modeltranslation?" ) - auth_key = os.environ.get("DEEPL_AUTH_KEY") + auth_key = getenv("DEEPL_AUTH_KEY") if not auth_key: raise CommandError("Environment variable DEEPL_AUTH_KEY is not set.") diff --git a/core/managers.py b/engine/core/managers.py similarity index 63% rename from core/managers.py rename to engine/core/managers.py index 283b1ee4..124de06a 100644 --- a/core/managers.py +++ b/engine/core/managers.py @@ -4,25 +4,26 @@ import requests from constance import config from django.contrib.gis.geos import Point from django.db import models +from modeltranslation.manager import MultilingualManager -logger = logging.getLogger("evibes") +logger = logging.getLogger(__name__) class AddressManager(models.Manager): - def create(self, raw_data: str, **kwargs): # type: ignore - if not raw_data: + def create(self, **kwargs): + if not kwargs.get("raw_data"): raise ValueError("'raw_data' (address string) must be provided.") - params: dict[str, str | int] = { + params: dict[str, str | int] = { # type: ignore [annotation-unchecked] "format": "json", "addressdetails": 1, - "q": raw_data, + "q": kwargs.get("raw_data"), } resp = requests.get(config.NOMINATIM_URL.rstrip("/") + "/search", params=params) resp.raise_for_status() results = resp.json() if not results: - raise ValueError(f"No geocoding result for address: {raw_data}") + raise ValueError(f"No geocoding result for address: {kwargs.get('raw_data')}") data = results[0] addr = data.get("address", {}) @@ -51,7 +52,7 @@ class AddressManager(models.Manager): address_line_2 = "" return super().get_or_create( - raw_data=raw_data, + raw_data=kwargs.get("raw_data"), address_line=f"{address_line_1}, {address_line_2}", street=street, district=district, @@ -62,3 +63,29 @@ class AddressManager(models.Manager): user=kwargs.pop("user"), defaults={"api_response": data, "location": location}, )[0] + + +class ProductManager(MultilingualManager): + def available(self): + return self.filter( + is_active=True, + brand__is_active=True, + category__is_active=True, + stocks__isnull=False, + stocks__vendor__is_active=True, + ) + + def available_in_stock(self): + return self.filter( + is_active=True, + brand__is_active=True, + category__is_active=True, + stocks__isnull=False, + stocks__vendor__is_active=True, + stocks__quantity__gt=0, + ) + + def with_related(self): + return self.select_related("category", "brand").prefetch_related( + "tags", "stocks", "images", "attributes__attribute__group" + ) diff --git a/engine/core/migrations/0001_initial.py b/engine/core/migrations/0001_initial.py new file mode 100644 index 00000000..9cfc3377 --- /dev/null +++ b/engine/core/migrations/0001_initial.py @@ -0,0 +1,2707 @@ +import uuid + +import django.core.validators +import django.db.models.deletion +import django_extensions.db.fields +import mptt.fields +from django.db import migrations, models + +import engine.core.utils +import engine.core.validators + + +class Migration(migrations.Migration): + initial = True + + operations = [ + migrations.CreateModel( + name="Feedback", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "comment", + models.TextField( + blank=True, + help_text="user-provided comments about their experience with the product", + null=True, + verbose_name="feedback comments", + ), + ), + ( + "rating", + models.FloatField( + blank=True, + help_text="user-assigned rating for the product", + null=True, + validators=[ + django.core.validators.MinValueValidator(0), + django.core.validators.MaxValueValidator(10), + ], + verbose_name="product rating", + ), + ), + ], + options={ + "verbose_name": "feedback", + "verbose_name_plural": "feedbacks", + }, + ), + migrations.CreateModel( + name="OrderProduct", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "buy_price", + models.FloatField( + blank=True, + help_text="the price paid by the customer for this product at purchase time", + null=True, + verbose_name="purchase price at order time", + ), + ), + ( + "comments", + models.TextField( + blank=True, + help_text="internal comments for admins about this ordered product", + null=True, + verbose_name="internal comments", + ), + ), + ( + "notifications", + models.JSONField( + blank=True, + help_text="json structure of notifications to display to users", + null=True, + verbose_name="user notifications", + ), + ), + ( + "attributes", + models.JSONField( + blank=True, + help_text="json representation of this item's attributes", + null=True, + verbose_name="ordered product attributes", + ), + ), + ( + "quantity", + models.PositiveIntegerField( + default=1, + help_text="quantity of this specific product in the order", + verbose_name="product quantity", + ), + ), + ( + "status", + models.CharField( + choices=[ + ("FINISHED", "finished"), + ("DELIVERING", "delivering"), + ("DELIVERED", "delivered"), + ("CANCELED", "canceled"), + ("FAILED", "failed"), + ("PENDING", "pending"), + ("ACCEPTED", "accepted"), + ("RETURNED", "money returned"), + ], + default="PENDING", + help_text="current status of this product in the order", + max_length=128, + verbose_name="product line status", + ), + ), + ], + options={ + "verbose_name": "order product", + "verbose_name_plural": "order products", + }, + ), + migrations.CreateModel( + name="Product", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "is_digital", + models.BooleanField( + default=False, + help_text="indicates whether this product is digitally delivered", + verbose_name="is product digital", + ), + ), + ( + "name", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + verbose_name="product name", + ), + ), + ( + "name_en_GB", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_ar_AR", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_cs_CZ", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_da_DK", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_de_DE", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_en_US", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_es_ES", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_fr_FR", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_hi_IN", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_it_IT", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_ja_JP", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_kk_KZ", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_nl_NL", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_pl_PL", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_pt_BR", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_ro_RO", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_ru_RU", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "name_zh_hans", + models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ( + "description", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_en_GB", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_ar_AR", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_cs_CZ", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_da_DK", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_de_DE", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_en_US", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_es_ES", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_fr_FR", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_hi_IN", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_it_IT", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_ja_JP", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_kk_KZ", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_nl_NL", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_pl_PL", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_pt_BR", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_ro_RO", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_ru_RU", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ( + "description_zh_hans", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + ], + options={ + "verbose_name": "product", + "verbose_name_plural": "products", + }, + ), + migrations.CreateModel( + name="ProductImage", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "alt", + models.CharField( + help_text="provide alternative text for the image for accessibility", + max_length=255, + verbose_name="image alt text", + ), + ), + ( + "image", + models.ImageField( + help_text="upload the image file for this product", + upload_to=engine.core.utils.get_product_uuid_as_path, + verbose_name="product image", + ), + ), + ( + "priority", + models.IntegerField( + default=1, + help_text="determines the order in which images are displayed", + validators=[django.core.validators.MinValueValidator(1)], + verbose_name="display priority", + ), + ), + ], + options={ + "verbose_name": "product image", + "verbose_name_plural": "product images", + "ordering": ("priority",), + }, + ), + migrations.CreateModel( + name="ProductTag", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "tag_name", + models.CharField( + help_text="internal tag identifier for the product tag", max_length=255, verbose_name="tag name" + ), + ), + ( + "name", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + verbose_name="tag display name", + ), + ), + ( + "name_en_GB", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_ar_AR", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_cs_CZ", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_da_DK", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_de_DE", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_en_US", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_es_ES", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_fr_FR", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_hi_IN", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_it_IT", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_ja_JP", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_kk_KZ", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_nl_NL", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_pl_PL", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_pt_BR", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_ro_RO", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_ru_RU", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ( + "name_zh_hans", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + verbose_name="tag display name", + ), + ), + ], + options={ + "verbose_name": "product tag", + "verbose_name_plural": "product tags", + }, + ), + migrations.CreateModel( + name="PromoCode", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "code", + models.CharField( + default=engine.core.utils.get_random_code, + help_text="unique code used by a user to redeem a discount", + max_length=20, + unique=True, + verbose_name="promo code identifier", + ), + ), + ( + "discount_amount", + models.DecimalField( + blank=True, + decimal_places=2, + help_text="fixed discount amount applied if percent is not used", + max_digits=10, + null=True, + verbose_name="fixed discount amount", + ), + ), + ( + "discount_percent", + models.IntegerField( + blank=True, + help_text="percentage discount applied if fixed amount is not used", + null=True, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(100), + ], + verbose_name="percentage discount", + ), + ), + ( + "end_time", + models.DateTimeField( + blank=True, + help_text="timestamp when the promocode expires", + null=True, + verbose_name="end validity time", + ), + ), + ( + "start_time", + models.DateTimeField( + blank=True, + help_text="timestamp from which this promocode is valid", + null=True, + verbose_name="start validity time", + ), + ), + ( + "used_on", + models.DateTimeField( + blank=True, + help_text="timestamp when the promocode was used, blank if not used yet", + null=True, + verbose_name="usage timestamp", + ), + ), + ], + options={ + "verbose_name": "promo code", + "verbose_name_plural": "promo codes", + }, + ), + migrations.CreateModel( + name="Promotion", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "discount_percent", + models.IntegerField( + help_text="percentage discount for the selected products", + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(100), + ], + verbose_name="discount percentage", + ), + ), + ( + "name", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_en_GB", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_ar_AR", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_cs_CZ", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_da_DK", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_de_DE", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_en_US", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_es_ES", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_fr_FR", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_hi_IN", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_it_IT", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_ja_JP", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_kk_KZ", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_nl_NL", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_pl_PL", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_pt_BR", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_ro_RO", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_ru_RU", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "name_zh_hans", + models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ( + "description", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_en_GB", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_ar_AR", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_cs_CZ", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_da_DK", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_de_DE", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_en_US", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_es_ES", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_fr_FR", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_hi_IN", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_it_IT", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_ja_JP", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_kk_KZ", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_nl_NL", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_pl_PL", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_pt_BR", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_ro_RO", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_ru_RU", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ( + "description_zh_hans", + models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + ], + options={ + "verbose_name": "promotion", + "verbose_name_plural": "promotions", + }, + ), + migrations.CreateModel( + name="Stock", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "price", + models.FloatField( + default=0.0, help_text="final price to the customer after markups", verbose_name="selling price" + ), + ), + ( + "purchase_price", + models.FloatField( + default=0.0, + help_text="the price paid to the vendor for this product", + verbose_name="vendor purchase price", + ), + ), + ( + "quantity", + models.IntegerField( + default=0, + help_text="available quantity of the product in stock", + verbose_name="quantity in stock", + ), + ), + ( + "sku", + models.CharField( + help_text="vendor-assigned SKU for identifying the product", + max_length=255, + verbose_name="vendor sku", + ), + ), + ( + "digital_asset", + models.FileField( + blank=True, + default=None, + help_text="digital file associated with this stock if applicable", + null=True, + upload_to="downloadables/", + verbose_name="digital file", + ), + ), + ], + options={ + "verbose_name": "stock", + "verbose_name_plural": "stock entries", + }, + ), + migrations.CreateModel( + name="Vendor", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "authentication", + models.JSONField( + blank=True, + help_text="stores credentials and endpoints required for vendor communication", + null=True, + verbose_name="authentication info", + ), + ), + ( + "markup_percent", + models.IntegerField( + default=0, + help_text="define the markup for products retrieved from this vendor", + validators=[ + django.core.validators.MinValueValidator(0), + django.core.validators.MaxValueValidator(100), + ], + verbose_name="vendor markup percentage", + ), + ), + ("name", models.CharField(help_text="name of this vendor", max_length=255, verbose_name="vendor name")), + ], + options={ + "verbose_name": "vendor", + "verbose_name_plural": "vendors", + }, + ), + migrations.CreateModel( + name="Wishlist", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ], + options={ + "verbose_name": "wishlist", + "verbose_name_plural": "wishlists", + }, + ), + migrations.CreateModel( + name="AttributeGroup", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "name", + models.CharField( + help_text="attribute group's name", max_length=255, verbose_name="attribute group's name" + ), + ), + ( + "name_en_GB", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_ar_AR", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_cs_CZ", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_da_DK", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_de_DE", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_en_US", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_es_ES", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_fr_FR", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_hi_IN", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_it_IT", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_ja_JP", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_kk_KZ", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_nl_NL", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_pl_PL", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_pt_BR", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_ro_RO", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_ru_RU", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "name_zh_hans", + models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + verbose_name="attribute group's name", + ), + ), + ( + "parent", + models.ForeignKey( + blank=True, + help_text="parent of this group", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="children", + to="core.attributegroup", + verbose_name="parent attribute group", + ), + ), + ], + options={ + "verbose_name": "attribute group", + "verbose_name_plural": "attribute groups", + }, + ), + migrations.CreateModel( + name="Attribute", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "value_type", + models.CharField( + choices=[ + ("string", "string"), + ("integer", "integer"), + ("float", "float"), + ("boolean", "boolean"), + ("array", "array"), + ("object", "object"), + ], + help_text="type of the attribute's value", + max_length=50, + verbose_name="value type", + ), + ), + ( + "name", + models.CharField( + help_text="name of this attribute", max_length=255, verbose_name="attribute's name" + ), + ), + ( + "name_en_GB", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_ar_AR", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_cs_CZ", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_da_DK", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_de_DE", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_en_US", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_es_ES", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_fr_FR", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_hi_IN", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_it_IT", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_ja_JP", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_kk_KZ", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_nl_NL", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_pl_PL", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_pt_BR", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_ro_RO", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_ru_RU", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "name_zh_hans", + models.CharField( + help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name" + ), + ), + ( + "group", + models.ForeignKey( + help_text="group of this attribute", + on_delete=django.db.models.deletion.CASCADE, + related_name="attributes", + to="core.attributegroup", + verbose_name="attribute group", + ), + ), + ], + options={ + "verbose_name": "attribute", + "verbose_name_plural": "attributes", + }, + ), + migrations.CreateModel( + name="AttributeValue", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "value", + models.TextField(help_text="the specific value for this attribute", verbose_name="attribute value"), + ), + ( + "value_en_GB", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_ar_AR", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_cs_CZ", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_da_DK", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_de_DE", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_en_US", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_es_ES", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_fr_FR", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_hi_IN", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_it_IT", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_ja_JP", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_kk_KZ", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_nl_NL", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_pl_PL", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_pt_BR", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_ro_RO", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_ru_RU", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "value_zh_hans", + models.TextField( + help_text="the specific value for this attribute", null=True, verbose_name="attribute value" + ), + ), + ( + "attribute", + models.ForeignKey( + help_text="attribute of this value", + on_delete=django.db.models.deletion.CASCADE, + related_name="values", + to="core.attribute", + verbose_name="attribute", + ), + ), + ], + options={ + "verbose_name": "attribute value", + "verbose_name_plural": "attribute values", + }, + ), + migrations.CreateModel( + name="Category", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "image", + models.ImageField( + help_text="upload an image representing this category", + null=True, + upload_to="categories/", + validators=[engine.core.validators.validate_category_image_dimensions], + verbose_name="category image", + ), + ), + ( + "markup_percent", + models.IntegerField( + default=0, + help_text="define a markup percentage for products in this category", + validators=[ + django.core.validators.MinValueValidator(0), + django.core.validators.MaxValueValidator(100), + ], + verbose_name="markup percentage", + ), + ), + ( + "name", + models.CharField( + help_text="provide a name for this category", max_length=255, verbose_name="category name" + ), + ), + ( + "name_en_GB", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_ar_AR", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_cs_CZ", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_da_DK", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_de_DE", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_en_US", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_es_ES", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_fr_FR", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_hi_IN", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_it_IT", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_ja_JP", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_kk_KZ", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_nl_NL", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_pl_PL", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_pt_BR", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_ro_RO", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_ru_RU", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "name_zh_hans", + models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + verbose_name="category name", + ), + ), + ( + "description", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_en_GB", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_ar_AR", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_cs_CZ", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_da_DK", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_de_DE", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_en_US", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_es_ES", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_fr_FR", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_hi_IN", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_it_IT", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_ja_JP", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_kk_KZ", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_nl_NL", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_pl_PL", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_pt_BR", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_ro_RO", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_ru_RU", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ( + "description_zh_hans", + models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + ("lft", models.PositiveIntegerField(editable=False)), + ("rght", models.PositiveIntegerField(editable=False)), + ("tree_id", models.PositiveIntegerField(db_index=True, editable=False)), + ("level", models.PositiveIntegerField(editable=False)), + ( + "parent", + mptt.fields.TreeForeignKey( + blank=True, + help_text="parent of this category to form a hierarchical structure", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="children", + to="core.category", + verbose_name="parent category", + ), + ), + ], + options={ + "verbose_name": "category", + "verbose_name_plural": "categories", + "ordering": ["tree_id", "lft"], + }, + ), + migrations.CreateModel( + name="Brand", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ("name", models.CharField(help_text="name of this brand", max_length=255, verbose_name="brand name")), + ( + "category", + models.ForeignKey( + blank=True, + help_text="optional category that this brand is associated with", + null=True, + on_delete=django.db.models.deletion.PROTECT, + to="core.category", + verbose_name="associated category", + ), + ), + ], + options={ + "verbose_name": "brand", + "verbose_name_plural": "brands", + }, + ), + migrations.AddField( + model_name="attribute", + name="categories", + field=models.ManyToManyField( + help_text="category of this attribute", + related_name="attributes", + to="core.category", + verbose_name="categories", + ), + ), + migrations.CreateModel( + name="Order", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "status", + models.CharField( + choices=[ + ("PENDING", "pending"), + ("FAILED", "failed"), + ("PAYMENT", "payment"), + ("CREATED", "created"), + ("DELIVERING", "delivering"), + ("FINISHED", "finished"), + ], + default="PENDING", + help_text="current status of the order in its lifecycle", + max_length=64, + verbose_name="order status", + ), + ), + ( + "notifications", + models.JSONField( + blank=True, + help_text="json structure of notifications to display to users", + null=True, + verbose_name="notifications", + ), + ), + ( + "attributes", + models.JSONField( + blank=True, + help_text="json representation of order attributes for this order", + null=True, + verbose_name="attributes", + ), + ), + ( + "buy_time", + models.DateTimeField( + blank=True, + default=None, + help_text="the timestamp when the order was finalized", + null=True, + verbose_name="buy time", + ), + ), + ], + options={ + "verbose_name": "order", + "verbose_name_plural": "orders", + }, + ), + ] diff --git a/engine/core/migrations/0002_initial.py b/engine/core/migrations/0002_initial.py new file mode 100644 index 00000000..12143cdb --- /dev/null +++ b/engine/core/migrations/0002_initial.py @@ -0,0 +1,209 @@ +import django.contrib.postgres.indexes +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ("core", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="order", + name="user", + field=models.ForeignKey( + help_text="the user who placed the order", + on_delete=django.db.models.deletion.CASCADE, + related_name="orders", + to=settings.AUTH_USER_MODEL, + verbose_name="user", + ), + ), + migrations.AddField( + model_name="orderproduct", + name="order", + field=models.ForeignKey( + help_text="reference to the parent order that contains this product", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="order_products", + to="core.order", + verbose_name="parent order", + ), + ), + migrations.AddField( + model_name="feedback", + name="order_product", + field=models.OneToOneField( + help_text="references the specific product in an order that this feedback is about", + on_delete=django.db.models.deletion.CASCADE, + to="core.orderproduct", + verbose_name="related order product", + ), + ), + migrations.AddField( + model_name="product", + name="brand", + field=models.ForeignKey( + blank=True, + help_text="optionally associate this product with a brand", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="core.brand", + verbose_name="brand", + ), + ), + migrations.AddField( + model_name="product", + name="category", + field=models.ForeignKey( + help_text="category this product belongs to", + on_delete=django.db.models.deletion.CASCADE, + to="core.category", + verbose_name="category", + ), + ), + migrations.AddField( + model_name="orderproduct", + name="product", + field=models.ForeignKey( + blank=True, + help_text="the specific product associated with this order line", + null=True, + on_delete=django.db.models.deletion.PROTECT, + to="core.product", + verbose_name="associated product", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="product", + field=models.ForeignKey( + help_text="the specific product associated with this attribute's value", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="attributes", + to="core.product", + verbose_name="associated product", + ), + ), + migrations.AddField( + model_name="productimage", + name="product", + field=models.ForeignKey( + help_text="the product that this image represents", + on_delete=django.db.models.deletion.CASCADE, + related_name="images", + to="core.product", + verbose_name="associated product", + ), + ), + migrations.AddField( + model_name="product", + name="tags", + field=models.ManyToManyField( + blank=True, + help_text="tags that help describe or group this product", + to="core.producttag", + verbose_name="product tags", + ), + ), + migrations.AddField( + model_name="promocode", + name="user", + field=models.ForeignKey( + blank=True, + help_text="user assigned to this promocode if applicable", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="promocodes", + to=settings.AUTH_USER_MODEL, + verbose_name="assigned user", + ), + ), + migrations.AddField( + model_name="order", + name="promo_code", + field=models.ForeignKey( + blank=True, + help_text="optional promo code applied to this order", + null=True, + on_delete=django.db.models.deletion.PROTECT, + to="core.promocode", + verbose_name="applied promo code", + ), + ), + migrations.AddField( + model_name="promotion", + name="products", + field=models.ManyToManyField( + blank=True, + help_text="select which products are included in this promotion", + to="core.product", + verbose_name="included products", + ), + ), + migrations.AddField( + model_name="stock", + name="product", + field=models.ForeignKey( + blank=True, + help_text="the product associated with this stock entry", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="stocks", + to="core.product", + verbose_name="associated product", + ), + ), + migrations.AddIndex( + model_name="vendor", + index=django.contrib.postgres.indexes.GinIndex( + fields=["authentication"], name="core_vendor_authent_80dc1f_gin" + ), + ), + migrations.AddField( + model_name="stock", + name="vendor", + field=models.ForeignKey( + help_text="the vendor supplying this product stock", + on_delete=django.db.models.deletion.CASCADE, + to="core.vendor", + verbose_name="associated vendor", + ), + ), + migrations.AddField( + model_name="wishlist", + name="products", + field=models.ManyToManyField( + blank=True, + help_text="products that the user has marked as wanted", + to="core.product", + verbose_name="wishlisted products", + ), + ), + migrations.AddField( + model_name="wishlist", + name="user", + field=models.OneToOneField( + blank=True, + help_text="user who owns this wishlist", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="user_related_wishlist", + to=settings.AUTH_USER_MODEL, + verbose_name="wishlist owner", + ), + ), + migrations.AddIndex( + model_name="orderproduct", + index=django.contrib.postgres.indexes.GinIndex( + fields=["notifications", "attributes"], name="core_orderp_notific_cd27e9_gin" + ), + ), + ] diff --git a/engine/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py b/engine/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py new file mode 100644 index 00000000..faf28dd7 --- /dev/null +++ b/engine/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py @@ -0,0 +1,1055 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0002_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="attribute", + name="name", + field=models.CharField( + help_text="name of this attribute", max_length=255, unique=True, verbose_name="attribute's name" + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ar_AR", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_cs_CZ", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_da_DK", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_de_DE", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_en_GB", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_en_US", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_es_ES", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_fr_FR", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_hi_IN", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_it_IT", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ja_JP", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_kk_KZ", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_nl_NL", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_pl_PL", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_pt_BR", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ro_RO", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ru_RU", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_zh_hans", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name", + field=models.CharField( + help_text="attribute group's name", max_length=255, unique=True, verbose_name="attribute group's name" + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_ar_AR", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_cs_CZ", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_da_DK", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_de_DE", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_en_GB", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_en_US", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_es_ES", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_fr_FR", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_hi_IN", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_it_IT", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_ja_JP", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_kk_KZ", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_nl_NL", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_pl_PL", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_pt_BR", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_ro_RO", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_ru_RU", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="attributegroup", + name="name_zh_hans", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AlterField( + model_name="brand", + name="name", + field=models.CharField( + help_text="name of this brand", max_length=255, unique=True, verbose_name="brand name" + ), + ), + migrations.AlterField( + model_name="category", + name="name", + field=models.CharField( + help_text="provide a name for this category", max_length=255, unique=True, verbose_name="category name" + ), + ), + migrations.AlterField( + model_name="category", + name="name_ar_AR", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_cs_CZ", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_da_DK", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_de_DE", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_en_GB", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_en_US", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_es_ES", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_fr_FR", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_hi_IN", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_it_IT", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_ja_JP", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_kk_KZ", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_nl_NL", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_pl_PL", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_pt_BR", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_ro_RO", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_ru_RU", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="category", + name="name_zh_hans", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AlterField( + model_name="product", + name="name", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ar_AR", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_cs_CZ", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_da_DK", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_de_DE", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_en_GB", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_en_US", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_es_ES", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_fr_FR", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_hi_IN", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_it_IT", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ja_JP", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_kk_KZ", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_nl_NL", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_pl_PL", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_pt_BR", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ro_RO", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ru_RU", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_zh_hans", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + unique=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_ar_AR", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_cs_CZ", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_da_DK", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_de_DE", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_en_GB", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_en_US", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_es_ES", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_fr_FR", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_hi_IN", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_it_IT", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_ja_JP", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_kk_KZ", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_nl_NL", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_pl_PL", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_pt_BR", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_ro_RO", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_ru_RU", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="producttag", + name="name_zh_hans", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AlterField( + model_name="vendor", + name="name", + field=models.CharField( + help_text="name of this vendor", max_length=255, unique=True, verbose_name="vendor name" + ), + ), + ] diff --git a/engine/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py b/engine/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py new file mode 100644 index 00000000..615d3c19 --- /dev/null +++ b/engine/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py @@ -0,0 +1,199 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="product", + name="name", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ar_AR", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_cs_CZ", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_da_DK", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_de_DE", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_en_GB", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_en_US", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_es_ES", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_fr_FR", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_hi_IN", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_it_IT", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ja_JP", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_kk_KZ", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_nl_NL", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_pl_PL", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_pt_BR", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ro_RO", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ru_RU", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_zh_hans", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + ] diff --git a/engine/core/migrations/0005_remove_brand_category_brand_categories.py b/engine/core/migrations/0005_remove_brand_category_brand_categories.py new file mode 100644 index 00000000..3c394bbb --- /dev/null +++ b/engine/core/migrations/0005_remove_brand_category_brand_categories.py @@ -0,0 +1,24 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0004_alter_product_name_alter_product_name_ar_ar_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="brand", + name="category", + ), + migrations.AddField( + model_name="brand", + name="categories", + field=models.ManyToManyField( + blank=True, + help_text="optional categories that this brand is associated with", + to="core.category", + verbose_name="associated categories", + ), + ), + ] diff --git a/engine/core/migrations/0006_alter_order_status.py b/engine/core/migrations/0006_alter_order_status.py new file mode 100644 index 00000000..0f6ef32f --- /dev/null +++ b/engine/core/migrations/0006_alter_order_status.py @@ -0,0 +1,29 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0005_remove_brand_category_brand_categories"), + ] + + operations = [ + migrations.AlterField( + model_name="order", + name="status", + field=models.CharField( + choices=[ + ("PENDING", "pending"), + ("FAILED", "failed"), + ("PAYMENT", "payment"), + ("CREATED", "created"), + ("DELIVERING", "delivering"), + ("FINISHED", "finished"), + ("MOMENTAL", "momental"), + ], + default="PENDING", + help_text="current status of the order in its lifecycle", + max_length=64, + verbose_name="order status", + ), + ), + ] diff --git a/engine/core/migrations/0007_alter_category_image.py b/engine/core/migrations/0007_alter_category_image.py new file mode 100644 index 00000000..2a680127 --- /dev/null +++ b/engine/core/migrations/0007_alter_category_image.py @@ -0,0 +1,24 @@ +from django.db import migrations, models + +import engine.core.validators + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0006_alter_order_status"), + ] + + operations = [ + migrations.AlterField( + model_name="category", + name="image", + field=models.ImageField( + blank=True, + help_text="upload an image representing this category", + null=True, + upload_to="categories/", + validators=[engine.core.validators.validate_category_image_dimensions], + verbose_name="category image", + ), + ), + ] diff --git a/engine/core/migrations/0008_digitalassetdownload.py b/engine/core/migrations/0008_digitalassetdownload.py new file mode 100644 index 00000000..3f5ca620 --- /dev/null +++ b/engine/core/migrations/0008_digitalassetdownload.py @@ -0,0 +1,63 @@ +import uuid + +import django.db.models.deletion +import django_extensions.db.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0007_alter_category_image"), + ] + + operations = [ + migrations.CreateModel( + name="DigitalAssetDownload", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ("num_downloads", models.IntegerField(default=0)), + ( + "order_product", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, related_name="download", to="core.orderproduct" + ), + ), + ], + options={ + "verbose_name": "download", + "verbose_name_plural": "downloads", + }, + ), + ] diff --git a/engine/core/migrations/0009_documentary.py b/engine/core/migrations/0009_documentary.py new file mode 100644 index 00000000..a744267a --- /dev/null +++ b/engine/core/migrations/0009_documentary.py @@ -0,0 +1,65 @@ +import uuid + +import django.db.models.deletion +import django_extensions.db.fields +from django.db import migrations, models + +import engine.core.utils + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0008_digitalassetdownload"), + ] + + operations = [ + migrations.CreateModel( + name="Documentary", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ("document", models.FileField(upload_to=engine.core.utils.get_product_uuid_as_path)), + ( + "product", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="documentaries", to="core.product" + ), + ), + ], + options={ + "verbose_name": "documentary", + "verbose_name_plural": "documentaries", + }, + ), + ] diff --git a/engine/core/migrations/0010_product_partnumber.py b/engine/core/migrations/0010_product_partnumber.py new file mode 100644 index 00000000..6953e0a4 --- /dev/null +++ b/engine/core/migrations/0010_product_partnumber.py @@ -0,0 +1,21 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0009_documentary"), + ] + + operations = [ + migrations.AddField( + model_name="product", + name="partnumber", + field=models.CharField( + default=None, + help_text="part number for this product", + null=True, + unique=True, + verbose_name="part number", + ), + ), + ] diff --git a/engine/core/migrations/0011_brand_big_logo_brand_description_and_more.py b/engine/core/migrations/0011_brand_big_logo_brand_description_and_more.py new file mode 100644 index 00000000..6b76b4df --- /dev/null +++ b/engine/core/migrations/0011_brand_big_logo_brand_description_and_more.py @@ -0,0 +1,226 @@ +from django.db import migrations, models + +import engine.core.validators + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0010_product_partnumber"), + ] + + operations = [ + migrations.AddField( + model_name="brand", + name="big_logo", + field=models.ImageField( + blank=True, + help_text="upload a big logo representing this brand", + null=True, + upload_to="brands/", + validators=[engine.core.validators.validate_category_image_dimensions], + verbose_name="brand big image", + ), + ), + migrations.AddField( + model_name="brand", + name="description", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_ar_AR", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_cs_CZ", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_da_DK", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_de_DE", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_en_GB", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_en_US", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_es_ES", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_fr_FR", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_hi_IN", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_it_IT", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_ja_JP", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_kk_KZ", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_nl_NL", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_pl_PL", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_pt_BR", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_ro_RO", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_ru_RU", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_zh_hans", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="small_logo", + field=models.ImageField( + blank=True, + help_text="upload a logo representing this brand", + null=True, + upload_to="brands/", + validators=[engine.core.validators.validate_category_image_dimensions], + verbose_name="brand small image", + ), + ), + ] diff --git a/engine/core/migrations/0012_alter_order_user.py b/engine/core/migrations/0012_alter_order_user.py new file mode 100644 index 00000000..0fb52fe2 --- /dev/null +++ b/engine/core/migrations/0012_alter_order_user.py @@ -0,0 +1,26 @@ +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0011_brand_big_logo_brand_description_and_more"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name="order", + name="user", + field=models.ForeignKey( + blank=True, + help_text="the user who placed the order", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="orders", + to=settings.AUTH_USER_MODEL, + verbose_name="user", + ), + ), + ] diff --git a/engine/core/migrations/0013_product_slug.py b/engine/core/migrations/0013_product_slug.py new file mode 100644 index 00000000..575bbca9 --- /dev/null +++ b/engine/core/migrations/0013_product_slug.py @@ -0,0 +1,23 @@ +import django_extensions.db.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0012_alter_order_user"), + ] + + operations = [ + migrations.AddField( + model_name="product", + name="slug", + field=django_extensions.db.fields.AutoSlugField( + allow_unicode=True, + null=True, + blank=True, + editable=False, + populate_from=("category.name", "brand.name", "name"), + unique=True, + ), + ), + ] diff --git a/engine/core/migrations/0014_alter_product_slug.py b/engine/core/migrations/0014_alter_product_slug.py new file mode 100644 index 00000000..1f46cff7 --- /dev/null +++ b/engine/core/migrations/0014_alter_product_slug.py @@ -0,0 +1,23 @@ +import django_extensions.db.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0013_product_slug"), + ] + + operations = [ + migrations.AlterField( + model_name="product", + name="slug", + field=django_extensions.db.fields.AutoSlugField( + allow_unicode=True, + blank=True, + editable=False, + null=True, + populate_from=("uuid", "category.name", "brand.name", "name"), + unique=True, + ), + ), + ] diff --git a/engine/core/migrations/0015_alter_product_slug.py b/engine/core/migrations/0015_alter_product_slug.py new file mode 100644 index 00000000..ff7380c4 --- /dev/null +++ b/engine/core/migrations/0015_alter_product_slug.py @@ -0,0 +1,23 @@ +import django_extensions.db.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0014_alter_product_slug"), + ] + + operations = [ + migrations.AlterField( + model_name="product", + name="slug", + field=django_extensions.db.fields.AutoSlugField( + allow_unicode=True, + blank=True, + editable=False, + null=True, + populate_from=("category__name", "name"), + unique=True, + ), + ), + ] diff --git a/engine/core/migrations/0016_alter_product_slug.py b/engine/core/migrations/0016_alter_product_slug.py new file mode 100644 index 00000000..c40a5fb9 --- /dev/null +++ b/engine/core/migrations/0016_alter_product_slug.py @@ -0,0 +1,23 @@ +import django_extensions.db.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0015_alter_product_slug"), + ] + + operations = [ + migrations.AlterField( + model_name="product", + name="slug", + field=django_extensions.db.fields.AutoSlugField( + allow_unicode=True, + blank=True, + editable=False, + null=True, + populate_from=("uuid", "category__name", "name"), + unique=True, + ), + ), + ] diff --git a/engine/core/migrations/0017_order_human_readable_id.py b/engine/core/migrations/0017_order_human_readable_id.py new file mode 100644 index 00000000..6957f31d --- /dev/null +++ b/engine/core/migrations/0017_order_human_readable_id.py @@ -0,0 +1,22 @@ +from django.db import migrations, models + +import engine.core.utils + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0016_alter_product_slug"), + ] + + operations = [ + migrations.AddField( + model_name="order", + name="human_readable_id", + field=models.CharField( + default=engine.core.utils.generate_human_readable_id, + help_text="a human-readable identifier for the order", + max_length=8, + verbose_name="human readable id", + ), + ), + ] diff --git a/core/migrations/0018_alter_order_human_readable_id.py b/engine/core/migrations/0018_alter_order_human_readable_id.py similarity index 59% rename from core/migrations/0018_alter_order_human_readable_id.py rename to engine/core/migrations/0018_alter_order_human_readable_id.py index 10f7899f..e608c7e8 100644 --- a/core/migrations/0018_alter_order_human_readable_id.py +++ b/engine/core/migrations/0018_alter_order_human_readable_id.py @@ -1,25 +1,22 @@ from django.db import migrations, models from django.db.models import Count -import core.utils +import engine.core.utils def fix_duplicates(apps, schema_editor): if schema_editor: pass Order = apps.get_model("core", "Order") - duplicates = ( - Order.objects.values("human_readable_id") - .annotate(count=Count("uuid")) - .filter(count__gt=1) - ) + duplicates = Order.objects.values("human_readable_id").annotate(count=Count("uuid")).filter(count__gt=1) for duplicate in duplicates: h_id = duplicate["human_readable_id"] orders = Order.objects.filter(human_readable_id=h_id).order_by("uuid") for order in orders[1:]: new_id = order.human_readable_id while Order.objects.filter(human_readable_id=new_id).exists(): - from core.utils import generate_human_readable_id + from engine.core.utils import generate_human_readable_id + new_id = generate_human_readable_id() order.human_readable_id = new_id order.save() @@ -35,16 +32,20 @@ def reverse_func(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('core', '0017_order_human_readable_id'), + ("core", "0017_order_human_readable_id"), ] operations = [ migrations.RunPython(fix_duplicates, reverse_func), migrations.AlterField( - model_name='order', - name='human_readable_id', - field=models.CharField(default=core.utils.generate_human_readable_id, - help_text='a human-readable identifier for the order', max_length=8, unique=True, - verbose_name='human readable id'), + model_name="order", + name="human_readable_id", + field=models.CharField( + default=engine.core.utils.generate_human_readable_id, + help_text="a human-readable identifier for the order", + max_length=8, + unique=True, + verbose_name="human readable id", + ), ), ] diff --git a/engine/core/migrations/0019_address.py b/engine/core/migrations/0019_address.py new file mode 100644 index 00000000..5effb319 --- /dev/null +++ b/engine/core/migrations/0019_address.py @@ -0,0 +1,94 @@ +import uuid + +import django.contrib.gis.db.models.fields +import django.db.models.deletion +import django_extensions.db.fields +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0018_alter_order_human_readable_id"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Address", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ("street", models.CharField(max_length=255, null=True, verbose_name="street")), + ("district", models.CharField(max_length=255, null=True, verbose_name="district")), + ("city", models.CharField(max_length=100, null=True, verbose_name="city")), + ("region", models.CharField(max_length=100, null=True, verbose_name="region")), + ("postal_code", models.CharField(max_length=20, null=True, verbose_name="postal code")), + ("country", models.CharField(max_length=40, null=True, verbose_name="country")), + ( + "location", + django.contrib.gis.db.models.fields.PointField( + blank=True, + geography=True, + help_text="geolocation point: (longitude, latitude)", + null=True, + srid=4326, + ), + ), + ( + "raw_data", + models.JSONField( + blank=True, help_text="full JSON response from geocoder for this address", null=True + ), + ), + ( + "api_response", + models.JSONField( + blank=True, help_text="stored JSON response from the geocoding service", null=True + ), + ), + ( + "user", + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL + ), + ), + ], + options={ + "verbose_name": "address", + "verbose_name_plural": "addresses", + "indexes": [models.Index(fields=["location"], name="core_addres_locatio_eb6b39_idx")], + }, + ), + ] diff --git a/core/migrations/0020_order_billing_address_order_shipping_address.py b/engine/core/migrations/0020_order_billing_address_order_shipping_address.py similarity index 52% rename from core/migrations/0020_order_billing_address_order_shipping_address.py rename to engine/core/migrations/0020_order_billing_address_order_shipping_address.py index 430b124e..718186f0 100644 --- a/core/migrations/0020_order_billing_address_order_shipping_address.py +++ b/engine/core/migrations/0020_order_billing_address_order_shipping_address.py @@ -5,7 +5,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('core', '0019_address'), + ("core", "0019_address"), ] operations = [ @@ -17,29 +17,30 @@ class Migration(migrations.Migration): ), reverse_sql=migrations.RunSQL.noop, ), - migrations.AddField( - model_name='order', - name='billing_address', + model_name="order", + name="billing_address", field=models.ForeignKey( - blank=True, null=True, + blank=True, + null=True, on_delete=models.deletion.CASCADE, - related_name='billing_address_order', - to='core.address', - verbose_name='billing address', - help_text='the billing address used for this order', + related_name="billing_address_order", + to="core.address", + verbose_name="billing address", + help_text="the billing address used for this order", ), ), migrations.AddField( - model_name='order', - name='shipping_address', + model_name="order", + name="shipping_address", field=models.ForeignKey( - blank=True, null=True, + blank=True, + null=True, on_delete=models.deletion.CASCADE, - related_name='shipping_address_order', - to='core.address', - verbose_name='shipping address', - help_text='the shipping address used for this order', + related_name="shipping_address_order", + to="core.address", + verbose_name="shipping address", + help_text="the shipping address used for this order", ), ), ] diff --git a/engine/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py b/engine/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py new file mode 100644 index 00000000..b3976fec --- /dev/null +++ b/engine/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py @@ -0,0 +1,945 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0020_order_billing_address_order_shipping_address"), + ] + + operations = [ + migrations.RenameField( + model_name="attribute", + old_name="name_ar_AR", + new_name="name_ar_ar", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_cs_CZ", + new_name="name_cs_cz", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_da_DK", + new_name="name_da_dk", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_de_DE", + new_name="name_de_de", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_en_GB", + new_name="name_en_gb", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_en_US", + new_name="name_en_us", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_es_ES", + new_name="name_es_es", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_fr_FR", + new_name="name_fr_fr", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_hi_IN", + new_name="name_hi_in", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_it_IT", + new_name="name_it_it", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_ja_JP", + new_name="name_ja_jp", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_kk_KZ", + new_name="name_kk_kz", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_nl_NL", + new_name="name_nl_nl", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_pl_PL", + new_name="name_pl_pl", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_pt_BR", + new_name="name_pt_br", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_ro_RO", + new_name="name_ro_ro", + ), + migrations.RenameField( + model_name="attribute", + old_name="name_ru_RU", + new_name="name_ru_ru", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_ar_AR", + new_name="name_ar_ar", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_cs_CZ", + new_name="name_cs_cz", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_da_DK", + new_name="name_da_dk", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_de_DE", + new_name="name_de_de", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_en_GB", + new_name="name_en_gb", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_en_US", + new_name="name_en_us", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_es_ES", + new_name="name_es_es", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_fr_FR", + new_name="name_fr_fr", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_hi_IN", + new_name="name_hi_in", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_it_IT", + new_name="name_it_it", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_ja_JP", + new_name="name_ja_jp", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_kk_KZ", + new_name="name_kk_kz", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_nl_NL", + new_name="name_nl_nl", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_pl_PL", + new_name="name_pl_pl", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_pt_BR", + new_name="name_pt_br", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_ro_RO", + new_name="name_ro_ro", + ), + migrations.RenameField( + model_name="attributegroup", + old_name="name_ru_RU", + new_name="name_ru_ru", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_ar_AR", + new_name="value_ar_ar", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_cs_CZ", + new_name="value_cs_cz", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_da_DK", + new_name="value_da_dk", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_de_DE", + new_name="value_de_de", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_en_GB", + new_name="value_en_gb", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_en_US", + new_name="value_en_us", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_es_ES", + new_name="value_es_es", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_fr_FR", + new_name="value_fr_fr", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_hi_IN", + new_name="value_hi_in", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_it_IT", + new_name="value_it_it", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_ja_JP", + new_name="value_ja_jp", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_kk_KZ", + new_name="value_kk_kz", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_nl_NL", + new_name="value_nl_nl", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_pl_PL", + new_name="value_pl_pl", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_pt_BR", + new_name="value_pt_br", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_ro_RO", + new_name="value_ro_ro", + ), + migrations.RenameField( + model_name="attributevalue", + old_name="value_ru_RU", + new_name="value_ru_ru", + ), + migrations.RenameField( + model_name="brand", + old_name="description_ar_AR", + new_name="description_ar_ar", + ), + migrations.RenameField( + model_name="brand", + old_name="description_cs_CZ", + new_name="description_cs_cz", + ), + migrations.RenameField( + model_name="brand", + old_name="description_da_DK", + new_name="description_da_dk", + ), + migrations.RenameField( + model_name="brand", + old_name="description_de_DE", + new_name="description_de_de", + ), + migrations.RenameField( + model_name="brand", + old_name="description_en_GB", + new_name="description_en_gb", + ), + migrations.RenameField( + model_name="brand", + old_name="description_en_US", + new_name="description_en_us", + ), + migrations.RenameField( + model_name="brand", + old_name="description_es_ES", + new_name="description_es_es", + ), + migrations.RenameField( + model_name="brand", + old_name="description_fr_FR", + new_name="description_fr_fr", + ), + migrations.RenameField( + model_name="brand", + old_name="description_hi_IN", + new_name="description_hi_in", + ), + migrations.RenameField( + model_name="brand", + old_name="description_it_IT", + new_name="description_it_it", + ), + migrations.RenameField( + model_name="brand", + old_name="description_ja_JP", + new_name="description_ja_jp", + ), + migrations.RenameField( + model_name="brand", + old_name="description_kk_KZ", + new_name="description_kk_kz", + ), + migrations.RenameField( + model_name="brand", + old_name="description_nl_NL", + new_name="description_nl_nl", + ), + migrations.RenameField( + model_name="brand", + old_name="description_pl_PL", + new_name="description_pl_pl", + ), + migrations.RenameField( + model_name="brand", + old_name="description_pt_BR", + new_name="description_pt_br", + ), + migrations.RenameField( + model_name="brand", + old_name="description_ro_RO", + new_name="description_ro_ro", + ), + migrations.RenameField( + model_name="brand", + old_name="description_ru_RU", + new_name="description_ru_ru", + ), + migrations.RenameField( + model_name="category", + old_name="description_ar_AR", + new_name="description_ar_ar", + ), + migrations.RenameField( + model_name="category", + old_name="description_cs_CZ", + new_name="description_cs_cz", + ), + migrations.RenameField( + model_name="category", + old_name="description_da_DK", + new_name="description_da_dk", + ), + migrations.RenameField( + model_name="category", + old_name="description_de_DE", + new_name="description_de_de", + ), + migrations.RenameField( + model_name="category", + old_name="description_en_GB", + new_name="description_en_gb", + ), + migrations.RenameField( + model_name="category", + old_name="description_en_US", + new_name="description_en_us", + ), + migrations.RenameField( + model_name="category", + old_name="description_es_ES", + new_name="description_es_es", + ), + migrations.RenameField( + model_name="category", + old_name="description_fr_FR", + new_name="description_fr_fr", + ), + migrations.RenameField( + model_name="category", + old_name="description_hi_IN", + new_name="description_hi_in", + ), + migrations.RenameField( + model_name="category", + old_name="description_it_IT", + new_name="description_it_it", + ), + migrations.RenameField( + model_name="category", + old_name="description_ja_JP", + new_name="description_ja_jp", + ), + migrations.RenameField( + model_name="category", + old_name="description_kk_KZ", + new_name="description_kk_kz", + ), + migrations.RenameField( + model_name="category", + old_name="description_nl_NL", + new_name="description_nl_nl", + ), + migrations.RenameField( + model_name="category", + old_name="description_pl_PL", + new_name="description_pl_pl", + ), + migrations.RenameField( + model_name="category", + old_name="description_pt_BR", + new_name="description_pt_br", + ), + migrations.RenameField( + model_name="category", + old_name="description_ro_RO", + new_name="description_ro_ro", + ), + migrations.RenameField( + model_name="category", + old_name="description_ru_RU", + new_name="description_ru_ru", + ), + migrations.RenameField( + model_name="category", + old_name="name_ar_AR", + new_name="name_ar_ar", + ), + migrations.RenameField( + model_name="category", + old_name="name_cs_CZ", + new_name="name_cs_cz", + ), + migrations.RenameField( + model_name="category", + old_name="name_da_DK", + new_name="name_da_dk", + ), + migrations.RenameField( + model_name="category", + old_name="name_de_DE", + new_name="name_de_de", + ), + migrations.RenameField( + model_name="category", + old_name="name_en_GB", + new_name="name_en_gb", + ), + migrations.RenameField( + model_name="category", + old_name="name_en_US", + new_name="name_en_us", + ), + migrations.RenameField( + model_name="category", + old_name="name_es_ES", + new_name="name_es_es", + ), + migrations.RenameField( + model_name="category", + old_name="name_fr_FR", + new_name="name_fr_fr", + ), + migrations.RenameField( + model_name="category", + old_name="name_hi_IN", + new_name="name_hi_in", + ), + migrations.RenameField( + model_name="category", + old_name="name_it_IT", + new_name="name_it_it", + ), + migrations.RenameField( + model_name="category", + old_name="name_ja_JP", + new_name="name_ja_jp", + ), + migrations.RenameField( + model_name="category", + old_name="name_kk_KZ", + new_name="name_kk_kz", + ), + migrations.RenameField( + model_name="category", + old_name="name_nl_NL", + new_name="name_nl_nl", + ), + migrations.RenameField( + model_name="category", + old_name="name_pl_PL", + new_name="name_pl_pl", + ), + migrations.RenameField( + model_name="category", + old_name="name_pt_BR", + new_name="name_pt_br", + ), + migrations.RenameField( + model_name="category", + old_name="name_ro_RO", + new_name="name_ro_ro", + ), + migrations.RenameField( + model_name="category", + old_name="name_ru_RU", + new_name="name_ru_ru", + ), + migrations.RenameField( + model_name="product", + old_name="description_ar_AR", + new_name="description_ar_ar", + ), + migrations.RenameField( + model_name="product", + old_name="description_cs_CZ", + new_name="description_cs_cz", + ), + migrations.RenameField( + model_name="product", + old_name="description_da_DK", + new_name="description_da_dk", + ), + migrations.RenameField( + model_name="product", + old_name="description_de_DE", + new_name="description_de_de", + ), + migrations.RenameField( + model_name="product", + old_name="description_en_GB", + new_name="description_en_gb", + ), + migrations.RenameField( + model_name="product", + old_name="description_en_US", + new_name="description_en_us", + ), + migrations.RenameField( + model_name="product", + old_name="description_es_ES", + new_name="description_es_es", + ), + migrations.RenameField( + model_name="product", + old_name="description_fr_FR", + new_name="description_fr_fr", + ), + migrations.RenameField( + model_name="product", + old_name="description_hi_IN", + new_name="description_hi_in", + ), + migrations.RenameField( + model_name="product", + old_name="description_it_IT", + new_name="description_it_it", + ), + migrations.RenameField( + model_name="product", + old_name="description_ja_JP", + new_name="description_ja_jp", + ), + migrations.RenameField( + model_name="product", + old_name="description_kk_KZ", + new_name="description_kk_kz", + ), + migrations.RenameField( + model_name="product", + old_name="description_nl_NL", + new_name="description_nl_nl", + ), + migrations.RenameField( + model_name="product", + old_name="description_pl_PL", + new_name="description_pl_pl", + ), + migrations.RenameField( + model_name="product", + old_name="description_pt_BR", + new_name="description_pt_br", + ), + migrations.RenameField( + model_name="product", + old_name="description_ro_RO", + new_name="description_ro_ro", + ), + migrations.RenameField( + model_name="product", + old_name="description_ru_RU", + new_name="description_ru_ru", + ), + migrations.RenameField( + model_name="product", + old_name="name_ar_AR", + new_name="name_ar_ar", + ), + migrations.RenameField( + model_name="product", + old_name="name_cs_CZ", + new_name="name_cs_cz", + ), + migrations.RenameField( + model_name="product", + old_name="name_da_DK", + new_name="name_da_dk", + ), + migrations.RenameField( + model_name="product", + old_name="name_de_DE", + new_name="name_de_de", + ), + migrations.RenameField( + model_name="product", + old_name="name_en_GB", + new_name="name_en_gb", + ), + migrations.RenameField( + model_name="product", + old_name="name_en_US", + new_name="name_en_us", + ), + migrations.RenameField( + model_name="product", + old_name="name_es_ES", + new_name="name_es_es", + ), + migrations.RenameField( + model_name="product", + old_name="name_fr_FR", + new_name="name_fr_fr", + ), + migrations.RenameField( + model_name="product", + old_name="name_hi_IN", + new_name="name_hi_in", + ), + migrations.RenameField( + model_name="product", + old_name="name_it_IT", + new_name="name_it_it", + ), + migrations.RenameField( + model_name="product", + old_name="name_ja_JP", + new_name="name_ja_jp", + ), + migrations.RenameField( + model_name="product", + old_name="name_kk_KZ", + new_name="name_kk_kz", + ), + migrations.RenameField( + model_name="product", + old_name="name_nl_NL", + new_name="name_nl_nl", + ), + migrations.RenameField( + model_name="product", + old_name="name_pl_PL", + new_name="name_pl_pl", + ), + migrations.RenameField( + model_name="product", + old_name="name_pt_BR", + new_name="name_pt_br", + ), + migrations.RenameField( + model_name="product", + old_name="name_ro_RO", + new_name="name_ro_ro", + ), + migrations.RenameField( + model_name="product", + old_name="name_ru_RU", + new_name="name_ru_ru", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_ar_AR", + new_name="name_ar_ar", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_cs_CZ", + new_name="name_cs_cz", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_da_DK", + new_name="name_da_dk", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_de_DE", + new_name="name_de_de", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_en_GB", + new_name="name_en_gb", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_en_US", + new_name="name_en_us", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_es_ES", + new_name="name_es_es", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_fr_FR", + new_name="name_fr_fr", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_hi_IN", + new_name="name_hi_in", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_it_IT", + new_name="name_it_it", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_ja_JP", + new_name="name_ja_jp", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_kk_KZ", + new_name="name_kk_kz", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_nl_NL", + new_name="name_nl_nl", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_pl_PL", + new_name="name_pl_pl", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_pt_BR", + new_name="name_pt_br", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_ro_RO", + new_name="name_ro_ro", + ), + migrations.RenameField( + model_name="producttag", + old_name="name_ru_RU", + new_name="name_ru_ru", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_ar_AR", + new_name="description_ar_ar", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_cs_CZ", + new_name="description_cs_cz", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_da_DK", + new_name="description_da_dk", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_de_DE", + new_name="description_de_de", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_en_GB", + new_name="description_en_gb", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_en_US", + new_name="description_en_us", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_es_ES", + new_name="description_es_es", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_fr_FR", + new_name="description_fr_fr", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_hi_IN", + new_name="description_hi_in", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_it_IT", + new_name="description_it_it", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_ja_JP", + new_name="description_ja_jp", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_kk_KZ", + new_name="description_kk_kz", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_nl_NL", + new_name="description_nl_nl", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_pl_PL", + new_name="description_pl_pl", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_pt_BR", + new_name="description_pt_br", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_ro_RO", + new_name="description_ro_ro", + ), + migrations.RenameField( + model_name="promotion", + old_name="description_ru_RU", + new_name="description_ru_ru", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_ar_AR", + new_name="name_ar_ar", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_cs_CZ", + new_name="name_cs_cz", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_da_DK", + new_name="name_da_dk", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_de_DE", + new_name="name_de_de", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_en_GB", + new_name="name_en_gb", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_en_US", + new_name="name_en_us", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_es_ES", + new_name="name_es_es", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_fr_FR", + new_name="name_fr_fr", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_hi_IN", + new_name="name_hi_in", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_it_IT", + new_name="name_it_it", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_ja_JP", + new_name="name_ja_jp", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_kk_KZ", + new_name="name_kk_kz", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_nl_NL", + new_name="name_nl_nl", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_pl_PL", + new_name="name_pl_pl", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_pt_BR", + new_name="name_pt_br", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_ro_RO", + new_name="name_ro_ro", + ), + migrations.RenameField( + model_name="promotion", + old_name="name_ru_RU", + new_name="name_ru_ru", + ), + ] diff --git a/core/migrations/0022_category_slug.py b/engine/core/migrations/0022_category_slug.py similarity index 54% rename from core/migrations/0022_category_slug.py rename to engine/core/migrations/0022_category_slug.py index fe1e3b26..b649857a 100644 --- a/core/migrations/0022_category_slug.py +++ b/engine/core/migrations/0022_category_slug.py @@ -1,5 +1,3 @@ -# Generated by Django 5.2 on 2025-05-21 09:35 - import django_extensions.db.fields from django.db import migrations @@ -7,7 +5,7 @@ from django.db import migrations def populate_slugs(apps, schema_editor): if schema_editor: pass - Category = apps.get_model('core', 'Category') + Category = apps.get_model("core", "Category") for category in Category.objects.all(): try: if not category.slug: @@ -18,15 +16,16 @@ def populate_slugs(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('core', '0021_rename_name_ar_ar_attribute_name_ar_ar_and_more'), + ("core", "0021_rename_name_ar_ar_attribute_name_ar_ar_and_more"), ] operations = [ migrations.AddField( - model_name='category', - name='slug', - field=django_extensions.db.fields.AutoSlugField(allow_unicode=True, blank=True, editable=False, null=True, - populate_from=('uuid', 'name'), unique=True), + model_name="category", + name="slug", + field=django_extensions.db.fields.AutoSlugField( + allow_unicode=True, blank=True, editable=False, null=True, populate_from=("uuid", "name"), unique=True + ), ), migrations.RunPython(populate_slugs, reverse_code=migrations.RunPython.noop), ] diff --git a/engine/core/migrations/0023_address_address_line.py b/engine/core/migrations/0023_address_address_line.py new file mode 100644 index 00000000..522a4d52 --- /dev/null +++ b/engine/core/migrations/0023_address_address_line.py @@ -0,0 +1,17 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0022_category_slug"), + ] + + operations = [ + migrations.AddField( + model_name="address", + name="address_line", + field=models.TextField( + blank=True, help_text="address line for the customer", null=True, verbose_name="address line" + ), + ), + ] diff --git a/engine/core/migrations/0024_categorytag_category_tags.py b/engine/core/migrations/0024_categorytag_category_tags.py new file mode 100644 index 00000000..00550a97 --- /dev/null +++ b/engine/core/migrations/0024_categorytag_category_tags.py @@ -0,0 +1,262 @@ +import uuid + +import django_extensions.db.fields +import django_prometheus.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0023_address_address_line"), + ] + + operations = [ + migrations.CreateModel( + name="CategoryTag", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, help_text="when the object was last modified", verbose_name="modified" + ), + ), + ( + "tag_name", + models.CharField( + help_text="internal tag identifier for the product tag", max_length=255, verbose_name="tag name" + ), + ), + ( + "name", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_en_gb", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_ar_ar", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_cs_cz", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_da_dk", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_de_de", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_en_us", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_es_es", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_fr_fr", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_hi_in", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_it_it", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_ja_jp", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_kk_kz", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_nl_nl", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_pl_pl", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_pt_br", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_ro_ro", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_ru_ru", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ( + "name_zh_hans", + models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + ], + options={ + "verbose_name": "category tag", + "verbose_name_plural": "category tags", + }, + bases=(django_prometheus.models.ExportModelOperationsMixin("category_tag"), models.Model), + ), + migrations.AddField( + model_name="category", + name="tags", + field=models.ManyToManyField( + blank=True, + help_text="tags that help describe or group this category", + to="core.categorytag", + verbose_name="category tags", + ), + ), + ] diff --git a/engine/core/migrations/0025_alter_product_category.py b/engine/core/migrations/0025_alter_product_category.py new file mode 100644 index 00000000..b651904d --- /dev/null +++ b/engine/core/migrations/0025_alter_product_category.py @@ -0,0 +1,22 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0024_categorytag_category_tags"), + ] + + operations = [ + migrations.AlterField( + model_name="product", + name="category", + field=models.ForeignKey( + help_text="category this product belongs to", + on_delete=django.db.models.deletion.CASCADE, + related_name="products", + to="core.category", + verbose_name="category", + ), + ), + ] diff --git a/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py b/engine/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py similarity index 96% rename from core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py rename to engine/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py index 3a0a57b3..4d085293 100644 --- a/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py +++ b/engine/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-18 19:21 - import django_extensions.db.fields from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ("core", "0025_alter_product_category"), ] diff --git a/core/migrations/0027_brand_priority_alter_brand_slug.py b/engine/core/migrations/0027_brand_priority_alter_brand_slug.py similarity index 94% rename from core/migrations/0027_brand_priority_alter_brand_slug.py rename to engine/core/migrations/0027_brand_priority_alter_brand_slug.py index 0aca9c40..90d1c04a 100644 --- a/core/migrations/0027_brand_priority_alter_brand_slug.py +++ b/engine/core/migrations/0027_brand_priority_alter_brand_slug.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-20 02:25 - import django_extensions.db.fields from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ("core", "0026_brand_slug_alter_category_slug_alter_product_slug"), ] diff --git a/core/migrations/0028_alter_category_slug_alter_product_slug.py b/engine/core/migrations/0028_alter_category_slug_alter_product_slug.py similarity index 95% rename from core/migrations/0028_alter_category_slug_alter_product_slug.py rename to engine/core/migrations/0028_alter_category_slug_alter_product_slug.py index e14befd4..0a3da6e1 100644 --- a/core/migrations/0028_alter_category_slug_alter_product_slug.py +++ b/engine/core/migrations/0028_alter_category_slug_alter_product_slug.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-21 16:04 - import django_extensions.db.fields from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ("core", "0027_brand_priority_alter_brand_slug"), ] diff --git a/core/migrations/0029_alter_category_slug.py b/engine/core/migrations/0029_alter_category_slug.py similarity index 92% rename from core/migrations/0029_alter_category_slug.py rename to engine/core/migrations/0029_alter_category_slug.py index 1c11d24d..a6f52322 100644 --- a/core/migrations/0029_alter_category_slug.py +++ b/engine/core/migrations/0029_alter_category_slug.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-21 16:29 - import django_extensions.db.fields from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ("core", "0028_alter_category_slug_alter_product_slug"), ] diff --git a/core/migrations/0030_alter_category_slug.py b/engine/core/migrations/0030_alter_category_slug.py similarity index 92% rename from core/migrations/0030_alter_category_slug.py rename to engine/core/migrations/0030_alter_category_slug.py index b46497e8..87442c0c 100644 --- a/core/migrations/0030_alter_category_slug.py +++ b/engine/core/migrations/0030_alter_category_slug.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-21 16:34 - import django_extensions.db.fields from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ("core", "0029_alter_category_slug"), ] diff --git a/core/migrations/0031_alter_product_slug.py b/engine/core/migrations/0031_alter_product_slug.py similarity index 92% rename from core/migrations/0031_alter_product_slug.py rename to engine/core/migrations/0031_alter_product_slug.py index cebf2052..6080738b 100644 --- a/core/migrations/0031_alter_product_slug.py +++ b/engine/core/migrations/0031_alter_product_slug.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-21 16:40 - import django_extensions.db.fields from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ("core", "0030_alter_category_slug"), ] diff --git a/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py b/engine/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py similarity index 97% rename from core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py rename to engine/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py index 237c5935..c3dd39e5 100644 --- a/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py +++ b/engine/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py @@ -1,11 +1,8 @@ -# Generated by Django 5.2 on 2025-06-21 17:14 - import django_extensions.db.fields from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ("core", "0031_alter_product_slug"), ] diff --git a/core/migrations/0033_alter_category_slug.py b/engine/core/migrations/0033_alter_category_slug.py similarity index 82% rename from core/migrations/0033_alter_category_slug.py rename to engine/core/migrations/0033_alter_category_slug.py index 034beed6..b43a9e12 100644 --- a/core/migrations/0033_alter_category_slug.py +++ b/engine/core/migrations/0033_alter_category_slug.py @@ -1,12 +1,9 @@ -# Generated by Django 5.2 on 2025-06-21 17:38 - from django.db import migrations -import core.utils.db +import engine.core.utils.db class Migration(migrations.Migration): - dependencies = [ ("core", "0032_alter_brand_slug_alter_category_slug_and_more"), ] @@ -15,7 +12,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="category", name="slug", - field=core.utils.db.TweakedAutoSlugField( + field=engine.core.utils.db.TweakedAutoSlugField( allow_unicode=True, blank=True, editable=False, diff --git a/core/migrations/0034_category_priority_alter_brand_priority.py b/engine/core/migrations/0034_category_priority_alter_brand_priority.py similarity index 92% rename from core/migrations/0034_category_priority_alter_brand_priority.py rename to engine/core/migrations/0034_category_priority_alter_brand_priority.py index cd64f3f1..28a17e1e 100644 --- a/core/migrations/0034_category_priority_alter_brand_priority.py +++ b/engine/core/migrations/0034_category_priority_alter_brand_priority.py @@ -1,10 +1,7 @@ -# Generated by Django 5.2 on 2025-06-21 21:40 - from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ("core", "0033_alter_category_slug"), ] diff --git a/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py b/engine/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py similarity index 92% rename from core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py rename to engine/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py index 5653f575..6cd21d99 100644 --- a/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py +++ b/engine/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py @@ -1,12 +1,9 @@ -# Generated by Django 5.2 on 2025-06-29 13:09 - -import core.utils.db +import engine.core.utils.db import django_extensions.db.fields from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ("core", "0034_category_priority_alter_brand_priority"), ] @@ -30,7 +27,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="category", name="slug", - field=core.utils.db.TweakedAutoSlugField( + field=engine.core.utils.db.TweakedAutoSlugField( allow_unicode=True, blank=True, editable=False, diff --git a/engine/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py b/engine/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py new file mode 100644 index 00000000..5db6217f --- /dev/null +++ b/engine/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py @@ -0,0 +1,28 @@ +import engine.core.utils +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0035_alter_brand_slug_alter_category_slug_and_more"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="vendor", + name="b2b_auth_token", + field=models.CharField( + blank=True, + default=engine.core.utils.generate_human_readable_token, + max_length=20, + null=True, + ), + ), + migrations.AddField( + model_name="vendor", + name="users", + field=models.ManyToManyField(blank=True, related_name="vendors", to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/engine/core/migrations/0037_product_sku.py b/engine/core/migrations/0037_product_sku.py new file mode 100644 index 00000000..0bf1b127 --- /dev/null +++ b/engine/core/migrations/0037_product_sku.py @@ -0,0 +1,23 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0036_vendor_b2b_auth_token_vendor_users"), + ] + + operations = [ + migrations.AddField( + model_name="product", + name="sku", + field=models.CharField( + blank=True, + db_index=True, + default=None, + help_text="stock keeping unit for this product", + max_length=8, + null=True, + verbose_name="SKU", + ), + ), + ] diff --git a/engine/core/migrations/0038_backfill_product_sku.py b/engine/core/migrations/0038_backfill_product_sku.py new file mode 100644 index 00000000..be467a8b --- /dev/null +++ b/engine/core/migrations/0038_backfill_product_sku.py @@ -0,0 +1,53 @@ +from django.db import migrations, transaction + + +def generate_unique_sku(make_candidate, taken): + while True: + c = make_candidate() + if c not in taken: + taken.add(c) + return c + + +# noinspection PyUnusedLocal +def backfill_sku(apps, schema_editor): + Product = apps.get_model("core", "Product") + from engine.core.utils import generate_human_readable_id as make_candidate + + taken = set(Product.objects.exclude(sku__isnull=True).values_list("sku", flat=True)) + + BATCH = 10000 + last_pk = 0 + + while True: + ids = list( + Product.objects.filter(sku__isnull=True, pk__gt=last_pk).order_by("pk").values_list("pk", flat=True)[:BATCH] + ) + if not ids: + break + + updates = [] + for pk in ids: + updates.append(Product(pk=pk, sku=generate_unique_sku(make_candidate, taken))) + + with transaction.atomic(): + Product.objects.bulk_update(updates, ["sku"], batch_size=BATCH) + + last_pk = ids[-1] + + +# noinspection PyUnusedLocal +def noop(apps, schema_editor): + pass + + +class Migration(migrations.Migration): + atomic = False + + dependencies = [ + ("core", "0037_product_sku"), + ] + + operations = [ + migrations.RunPython(backfill_sku, reverse_code=noop), + ] diff --git a/engine/core/migrations/0039_alter_product_sku.py b/engine/core/migrations/0039_alter_product_sku.py new file mode 100644 index 00000000..4497eb8d --- /dev/null +++ b/engine/core/migrations/0039_alter_product_sku.py @@ -0,0 +1,22 @@ +import engine.core.utils +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0038_backfill_product_sku"), + ] + + operations = [ + migrations.AlterField( + model_name="product", + name="sku", + field=models.CharField( + default=engine.core.utils.generate_human_readable_id, + help_text="stock keeping unit for this product", + max_length=8, + unique=True, + verbose_name="SKU", + ), + ), + ] diff --git a/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py b/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py new file mode 100644 index 00000000..168ae5b0 --- /dev/null +++ b/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py @@ -0,0 +1,151 @@ +import django.db.models.deletion +import django_extensions.db.fields +import django_prometheus.models +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0039_alter_product_sku"), + ] + + operations = [ + migrations.CreateModel( + name="CustomerRelationshipManagementProvider", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, + help_text="when the object was last modified", + verbose_name="modified", + ), + ), + ( + "name", + models.CharField(max_length=128, unique=True, verbose_name="name"), + ), + ( + "integration_url", + models.URLField(blank=True, help_text="URL of the integration", null=True), + ), + ( + "authentication", + models.JSONField(blank=True, help_text="authentication credentials", null=True), + ), + ( + "attributes", + models.JSONField(blank=True, null=True, verbose_name="attributes"), + ), + ( + "integration_location", + models.CharField(blank=True, max_length=128, null=True), + ), + ("default", models.BooleanField(default=False)), + ], + options={ + "verbose_name": "order CRM link", + "verbose_name_plural": "orders CRM links", + }, + bases=( + django_prometheus.models.ExportModelOperationsMixin("crm_provider"), + models.Model, + ), + ), + migrations.CreateModel( + name="OrderCrmLink", + fields=[ + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + editable=False, + help_text="unique id is used to surely identify any database object", + primary_key=True, + serialize=False, + verbose_name="unique id", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="if set to false, this object can't be seen by users without needed permission", + verbose_name="is active", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + help_text="when the object first appeared on the database", + verbose_name="created", + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, + help_text="when the object was last modified", + verbose_name="modified", + ), + ), + ( + "crm_lead_id", + models.CharField(db_index=True, max_length=30, unique=True), + ), + ( + "crm", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="order_links", + to="core.customerrelationshipmanagementprovider", + ), + ), + ( + "order", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="crm_links", + to="core.order", + ), + ), + ], + options={ + "verbose_name": "order CRM link", + "verbose_name_plural": "orders CRM links", + }, + bases=( + django_prometheus.models.ExportModelOperationsMixin("order_crm_link"), + models.Model, + ), + ), + ] diff --git a/engine/core/migrations/0041_alter_customerrelationshipmanagementprovider_options.py b/engine/core/migrations/0041_alter_customerrelationshipmanagementprovider_options.py new file mode 100644 index 00000000..9db19494 --- /dev/null +++ b/engine/core/migrations/0041_alter_customerrelationshipmanagementprovider_options.py @@ -0,0 +1,14 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0040_customerrelationshipmanagementprovider_ordercrmlink"), + ] + + operations = [ + migrations.AlterModelOptions( + name="customerrelationshipmanagementprovider", + options={"verbose_name": "CRM", "verbose_name_plural": "CRMs"}, + ), + ] diff --git a/engine/core/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py b/engine/core/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py new file mode 100644 index 00000000..5e213c36 --- /dev/null +++ b/engine/core/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py @@ -0,0 +1,1260 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0041_alter_customerrelationshipmanagementprovider_options"), + ] + + operations = [ + migrations.AddField( + model_name="attribute", + name="name_fa_ir", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_he_il", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_hr_hr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_id_id", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_ko_kr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_no_no", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_sv_se", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_th_th", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_tr_tr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attribute", + name="name_vi_vn", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + unique=True, + verbose_name="attribute's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_fa_ir", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_he_il", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_hr_hr", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_id_id", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_ko_kr", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_no_no", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_sv_se", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_th_th", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_tr_tr", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributegroup", + name="name_vi_vn", + field=models.CharField( + help_text="attribute group's name", + max_length=255, + null=True, + unique=True, + verbose_name="attribute group's name", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_fa_ir", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_he_il", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_hr_hr", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_id_id", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_ko_kr", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_no_no", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_sv_se", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_th_th", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_tr_tr", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="attributevalue", + name="value_vi_vn", + field=models.TextField( + help_text="the specific value for this attribute", + null=True, + verbose_name="attribute value", + ), + ), + migrations.AddField( + model_name="brand", + name="description_fa_ir", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_he_il", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_hr_hr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_id_id", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_ko_kr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_no_no", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_sv_se", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_th_th", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_tr_tr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="brand", + name="description_vi_vn", + field=models.TextField( + blank=True, + help_text="add a detailed description of the brand", + null=True, + verbose_name="brand description", + ), + ), + migrations.AddField( + model_name="category", + name="description_fa_ir", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_he_il", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_hr_hr", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_id_id", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_ko_kr", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_no_no", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_sv_se", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_th_th", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_tr_tr", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="description_vi_vn", + field=models.TextField( + blank=True, + help_text="add a detailed description for this category", + null=True, + verbose_name="category description", + ), + ), + migrations.AddField( + model_name="category", + name="name_fa_ir", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_he_il", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_hr_hr", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_id_id", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_ko_kr", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_no_no", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_sv_se", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_th_th", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_tr_tr", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="category", + name="name_vi_vn", + field=models.CharField( + help_text="provide a name for this category", + max_length=255, + null=True, + unique=True, + verbose_name="category name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_fa_ir", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_he_il", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_hr_hr", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_id_id", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_ko_kr", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_no_no", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_sv_se", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_th_th", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_tr_tr", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="categorytag", + name="name_vi_vn", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="product", + name="description_fa_ir", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_he_il", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_hr_hr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_id_id", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_ko_kr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_no_no", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_sv_se", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_th_th", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_tr_tr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="description_vi_vn", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="product description", + ), + ), + migrations.AddField( + model_name="product", + name="name_fa_ir", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_he_il", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_hr_hr", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_id_id", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_ko_kr", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_no_no", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_sv_se", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_th_th", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_tr_tr", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="product", + name="name_vi_vn", + field=models.CharField( + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_fa_ir", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_he_il", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_hr_hr", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_id_id", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_ko_kr", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_no_no", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_sv_se", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_th_th", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_tr_tr", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="producttag", + name="name_vi_vn", + field=models.CharField( + help_text="user-friendly name for the product tag", + max_length=255, + null=True, + unique=True, + verbose_name="tag display name", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_fa_ir", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_he_il", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_hr_hr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_id_id", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_ko_kr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_no_no", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_sv_se", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_th_th", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_tr_tr", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="description_vi_vn", + field=models.TextField( + blank=True, + help_text="add a detailed description of the product", + null=True, + verbose_name="promotion description", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_fa_ir", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_he_il", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_hr_hr", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_id_id", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_ko_kr", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_no_no", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_sv_se", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_th_th", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_tr_tr", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + migrations.AddField( + model_name="promotion", + name="name_vi_vn", + field=models.CharField( + help_text="provide a unique name for this promotion", + max_length=256, + null=True, + unique=True, + verbose_name="promotion name", + ), + ), + ] diff --git a/engine/core/migrations/0043_attribute_is_filterable_and_more.py b/engine/core/migrations/0043_attribute_is_filterable_and_more.py new file mode 100644 index 00000000..a4dcf358 --- /dev/null +++ b/engine/core/migrations/0043_attribute_is_filterable_and_more.py @@ -0,0 +1,23 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0042_attribute_name_fa_ir_attribute_name_he_il_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="attribute", + name="is_filterable", + field=models.BooleanField( + default=True, + help_text="designates whether this attribute can be used for filtering or not", + verbose_name="is filterable", + ), + ), + migrations.AlterUniqueTogether( + name="attribute", + unique_together={("name", "group")}, + ), + ] diff --git a/engine/core/migrations/0044_vendor_last_processing_response.py b/engine/core/migrations/0044_vendor_last_processing_response.py new file mode 100644 index 00000000..b8d470ff --- /dev/null +++ b/engine/core/migrations/0044_vendor_last_processing_response.py @@ -0,0 +1,22 @@ +import engine.core.utils +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0043_attribute_is_filterable_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="vendor", + name="last_processing_response", + field=models.FileField( + blank=True, + help_text="vendor's last processing response", + null=True, + upload_to=engine.core.utils.get_vendor_name_as_path, + verbose_name="response file", + ), + ), + ] diff --git a/engine/core/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py b/engine/core/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py new file mode 100644 index 00000000..088c7c5b --- /dev/null +++ b/engine/core/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py @@ -0,0 +1,365 @@ +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0044_vendor_last_processing_response"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name="product", + name="name", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ar_ar", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_cs_cz", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_da_dk", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_de_de", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_en_gb", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_en_us", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_es_es", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_fa_ir", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_fr_fr", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_he_il", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_hi_in", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_hr_hr", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_id_id", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_it_it", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ja_jp", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_kk_kz", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ko_kr", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_nl_nl", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_no_no", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_pl_pl", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_pt_br", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ro_ro", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_ru_ru", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_sv_se", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_th_th", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_tr_tr", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_vi_vn", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AlterField( + model_name="product", + name="name_zh_hans", + field=models.CharField( + db_index=True, + help_text="provide a clear identifying name for the product", + max_length=255, + null=True, + verbose_name="product name", + ), + ), + migrations.AddIndex( + model_name="order", + index=models.Index(fields=["user", "status"], name="core_order_user_id_4407f8_idx"), + ), + migrations.AddIndex( + model_name="order", + index=models.Index(fields=["status", "buy_time"], name="core_order_status_4a088a_idx"), + ), + migrations.AddIndex( + model_name="orderproduct", + index=models.Index(fields=["order", "status"], name="core_orderp_order_i_d16192_idx"), + ), + migrations.AddIndex( + model_name="orderproduct", + index=models.Index(fields=["product", "status"], name="core_orderp_product_ee8abb_idx"), + ), + migrations.AddIndex( + model_name="product", + index=models.Index( + fields=["is_active", "brand", "category"], + name="core_produc_is_acti_9d27c3_idx", + ), + ), + migrations.AddIndex( + model_name="product", + index=models.Index(fields=["slug"], name="core_produc_slug_42f8f6_idx"), + ), + migrations.AddIndex( + model_name="product", + index=models.Index(fields=["sku"], name="core_produc_sku_a1eae6_idx"), + ), + migrations.AddIndex( + model_name="vendor", + index=models.Index(fields=["name"], name="core_vendor_name_91f195_idx"), + ), + ] diff --git a/engine/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py b/engine/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py new file mode 100644 index 00000000..6197615c --- /dev/null +++ b/engine/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py @@ -0,0 +1,299 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0045_alter_product_name_alter_product_name_ar_ar_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="attribute", + name="name", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ar_ar", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_cs_cz", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_da_dk", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_de_de", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_en_gb", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_en_us", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_es_es", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_fa_ir", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_fr_fr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_he_il", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_hi_in", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_hr_hr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_id_id", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_it_it", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ja_jp", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_kk_kz", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ko_kr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_nl_nl", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_no_no", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_pl_pl", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_pt_br", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ro_ro", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ru_ru", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_sv_se", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_th_th", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_tr_tr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_vi_vn", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_zh_hans", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + ] diff --git a/engine/core/migrations/0047_alter_attribute_unique_together.py b/engine/core/migrations/0047_alter_attribute_unique_together.py new file mode 100644 index 00000000..21b3574c --- /dev/null +++ b/engine/core/migrations/0047_alter_attribute_unique_together.py @@ -0,0 +1,14 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more"), + ] + + operations = [ + migrations.AlterUniqueTogether( + name="attribute", + unique_together={("name", "group", "value_type")}, + ), + ] diff --git a/engine/core/migrations/0048_vendor_integration_path_alter_productimage_priority.py b/engine/core/migrations/0048_vendor_integration_path_alter_productimage_priority.py new file mode 100644 index 00000000..00878031 --- /dev/null +++ b/engine/core/migrations/0048_vendor_integration_path_alter_productimage_priority.py @@ -0,0 +1,30 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0047_alter_attribute_unique_together"), + ] + + operations = [ + migrations.AddField( + model_name="vendor", + name="integration_path", + field=models.CharField( + blank=True, + help_text="vendor's integration file path", + max_length=255, + null=True, + verbose_name="integration path", + ), + ), + migrations.AlterField( + model_name="productimage", + name="priority", + field=models.PositiveIntegerField( + default=1, + help_text="determines the order in which images are displayed", + verbose_name="display priority", + ), + ), + ] diff --git a/engine/core/migrations/0049_alter_attribute_unique_together.py b/engine/core/migrations/0049_alter_attribute_unique_together.py new file mode 100644 index 00000000..e3d8dcae --- /dev/null +++ b/engine/core/migrations/0049_alter_attribute_unique_together.py @@ -0,0 +1,44 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0048_vendor_integration_path_alter_productimage_priority"), + ] + + operations = [ + migrations.AlterUniqueTogether( + name="attribute", + unique_together={ + ("name", "group", "value_type"), + ("name_ar_ar", "group", "value_type"), + ("name_cs_cz", "group", "value_type"), + ("name_da_dk", "group", "value_type"), + ("name_de_de", "group", "value_type"), + ("name_en_gb", "group", "value_type"), + ("name_en_us", "group", "value_type"), + ("name_es_es", "group", "value_type"), + ("name_fa_ir", "group", "value_type"), + ("name_fr_fr", "group", "value_type"), + ("name_he_il", "group", "value_type"), + ("name_hi_in", "group", "value_type"), + ("name_hr_hr", "group", "value_type"), + ("name_id_id", "group", "value_type"), + ("name_it_it", "group", "value_type"), + ("name_ja_jp", "group", "value_type"), + ("name_kk_kz", "group", "value_type"), + ("name_ko_kr", "group", "value_type"), + ("name_nl_nl", "group", "value_type"), + ("name_no_no", "group", "value_type"), + ("name_pl_pl", "group", "value_type"), + ("name_pt_br", "group", "value_type"), + ("name_ro_ro", "group", "value_type"), + ("name_ru_ru", "group", "value_type"), + ("name_sv_se", "group", "value_type"), + ("name_th_th", "group", "value_type"), + ("name_tr_tr", "group", "value_type"), + ("name_vi_vn", "group", "value_type"), + ("name_zh_hans", "group", "value_type"), + }, + ), + ] diff --git a/engine/core/migrations/0050_remove_attribute_categories.py b/engine/core/migrations/0050_remove_attribute_categories.py new file mode 100644 index 00000000..c1e02bac --- /dev/null +++ b/engine/core/migrations/0050_remove_attribute_categories.py @@ -0,0 +1,14 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0049_alter_attribute_unique_together"), + ] + + operations = [ + migrations.RemoveField( + model_name="attribute", + name="categories", + ), + ] diff --git a/engine/core/migrations/0051_stock_system_attributes.py b/engine/core/migrations/0051_stock_system_attributes.py new file mode 100644 index 00000000..80075d39 --- /dev/null +++ b/engine/core/migrations/0051_stock_system_attributes.py @@ -0,0 +1,15 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0050_remove_attribute_categories"), + ] + + operations = [ + migrations.AddField( + model_name="stock", + name="system_attributes", + field=models.JSONField(default=dict, verbose_name="system attributes"), + ), + ] diff --git a/engine/core/migrations/0052_alter_stock_system_attributes.py b/engine/core/migrations/0052_alter_stock_system_attributes.py new file mode 100644 index 00000000..2cb1ed12 --- /dev/null +++ b/engine/core/migrations/0052_alter_stock_system_attributes.py @@ -0,0 +1,15 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0051_stock_system_attributes"), + ] + + operations = [ + migrations.AlterField( + model_name="stock", + name="system_attributes", + field=models.JSONField(blank=True, default=dict, verbose_name="system attributes"), + ), + ] diff --git a/payments/__init__.py b/engine/core/migrations/__init__.py similarity index 100% rename from payments/__init__.py rename to engine/core/migrations/__init__.py diff --git a/core/mixins.py b/engine/core/mixins.py similarity index 100% rename from core/mixins.py rename to engine/core/mixins.py diff --git a/engine/core/models.py b/engine/core/models.py new file mode 100644 index 00000000..57aa654b --- /dev/null +++ b/engine/core/models.py @@ -0,0 +1,1971 @@ +import datetime +import json +import logging +from contextlib import suppress +from typing import Any, Iterable, Self + +from constance import config +from django.conf import settings +from django.contrib.gis.db.models import PointField +from django.contrib.postgres.indexes import GinIndex +from django.core.cache import cache +from django.core.exceptions import BadRequest, ValidationError +from django.core.validators import MaxValueValidator, MinValueValidator +from django.db import transaction +from django.db.models import ( + CASCADE, + PROTECT, + Avg, + BooleanField, + CharField, + DateTimeField, + DecimalField, + F, + FileField, + FloatField, + ForeignKey, + ImageField, + IntegerField, + JSONField, + ManyToManyField, + Max, + OneToOneField, + PositiveIntegerField, + QuerySet, + Sum, + TextField, + URLField, +) +from django.db.models.functions import Length +from django.db.models.indexes import Index +from django.http import Http404 +from django.utils import timezone +from django.utils.encoding import force_bytes +from django.utils.functional import cached_property +from django.utils.http import urlsafe_base64_encode +from django.utils.translation import gettext_lazy as _ +from django_extensions.db.fields import AutoSlugField +from django_prometheus.models import ExportModelOperationsMixin +from mptt.fields import TreeForeignKey +from mptt.models import MPTTModel + +from engine.core.abstract import NiceModel +from engine.core.choices import ORDER_PRODUCT_STATUS_CHOICES, ORDER_STATUS_CHOICES +from engine.core.errors import DisabledCommerceError, NotEnoughMoneyError +from engine.core.managers import AddressManager, ProductManager +from engine.core.typing import FilterableAttribute +from engine.core.utils import ( + generate_human_readable_id, + generate_human_readable_token, + get_product_uuid_as_path, + get_random_code, + get_vendor_name_as_path, +) +from engine.core.utils.db import TweakedAutoSlugField, unicode_slugify_function +from engine.core.utils.lists import FAILED_STATUSES +from engine.core.validators import validate_category_image_dimensions +from engine.payments.models import Transaction +from evibes.utils.misc import create_object + +logger = logging.getLogger(__name__) + + +class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a group of attributes, which can be hierarchical." + " This class is used to manage and organize attribute groups." + " An attribute group can have a parent group, forming a hierarchical structure." + " This can be useful for categorizing and managing attributes more effectively in acomplex system." + ) + + is_publicly_visible = True + attributes: QuerySet["Attribute"] + children: QuerySet["Self"] + + parent = ForeignKey( + "self", + on_delete=CASCADE, + null=True, + blank=True, + related_name="children", + help_text=_("parent of this group"), + verbose_name=_("parent attribute group"), + ) + name = CharField( + max_length=255, + verbose_name=_("attribute group's name"), + help_text=_("attribute group's name"), + unique=True, + ) + + def __str__(self) -> str: + return self.name + + class Meta: + verbose_name = _("attribute group") + verbose_name_plural = _("attribute groups") + + +class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a vendor entity capable of storing information about external vendors and their interaction requirements." + " The Vendor class is used to define and manage information related to an external vendor." + " It stores the vendor's name, authentication details required for communication," + " and the percentage markup applied to products retrieved from the vendor." + " This model also maintains additional metadata and constraints," + " making it suitable for use in systems that interact with third-party vendors." + ) + + is_publicly_visible = False + + authentication = JSONField( + blank=True, + null=True, + help_text=_("stores credentials and endpoints required for vendor communication"), + verbose_name=_("authentication info"), + ) + markup_percent = IntegerField( + default=0, + validators=[MinValueValidator(0), MaxValueValidator(100)], + help_text=_("define the markup for products retrieved from this vendor"), + verbose_name=_("vendor markup percentage"), + ) + name = CharField( + max_length=255, + help_text=_("name of this vendor"), + verbose_name=_("vendor name"), + blank=False, + null=False, + unique=True, + ) + users = ManyToManyField(to=settings.AUTH_USER_MODEL, related_name="vendors", blank=True) + b2b_auth_token = CharField(default=generate_human_readable_token, max_length=20, null=True, blank=True) + last_processing_response = FileField( + upload_to=get_vendor_name_as_path, + blank=True, + null=True, + verbose_name=_("response file"), + help_text=_("vendor's last processing response"), + ) + integration_path = CharField( + null=True, + blank=True, + max_length=255, + help_text=_("vendor's integration file path"), + verbose_name=_("integration path"), + ) + + def __str__(self) -> str: + return self.name + + def save( # type: ignore [override] + self, + *, + force_insert: bool = False, + force_update: bool = False, + using: str | None = None, + update_fields: list[str] | tuple[str, ...] | None = None, + update_modified: bool = True, + ) -> None: + users = self.users.filter(is_active=True) + users = users.exclude(attributes__icontains="is_business") + if users.count() > 0: + for user in users: + if not user.attributes: + user.attributes = {} + user.attributes.update({"is_business": True}) + user.save() + return super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) + + class Meta: + verbose_name = _("vendor") + verbose_name_plural = _("vendors") + indexes = [ + GinIndex(fields=["authentication"]), + Index(fields=["name"]), + ] + + +class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a product tag used for classifying or identifying products." + " The ProductTag class is designed to uniquely identify and classify products through a combination" + " of an internal tag identifier and a user-friendly display name." + " It supports operations exported through mixins and provides metadata customization for administrative purposes." + ) + + is_publicly_visible = True + + tag_name = CharField( + blank=False, + null=False, + max_length=255, + help_text=_("internal tag identifier for the product tag"), + verbose_name=_("tag name"), + ) + name = CharField( + max_length=255, + help_text=_("user-friendly name for the product tag"), + verbose_name=_("tag display name"), + unique=True, + ) + + def __str__(self): + return self.tag_name + + class Meta: + verbose_name = _("product tag") + verbose_name_plural = _("product tags") + + +class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a category tag used for products." + " This class models a category tag that can be used to associate and classify products." + " It includes attributes for an internal tag identifier and a user-friendly display name." + ) + + is_publicly_visible = True + + tag_name = CharField( + blank=False, + null=False, + max_length=255, + help_text=_("internal tag identifier for the product tag"), + verbose_name=_("tag name"), + ) + name = CharField( + max_length=255, + help_text=_("user-friendly name for the product tag"), + verbose_name=_("tag display name"), + unique=True, + ) + + def __str__(self): + return self.tag_name + + class Meta: + verbose_name = _("category tag") + verbose_name_plural = _("category tags") + + +class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # type: ignore [misc, django-manager-missing] + __doc__ = _( # type: ignore + "Represents a category entity to organize and group related items in a hierarchical structure." + " Categories may have hierarchical relationships with other categories, supporting parent-child relationships." + " The class includes fields for metadata and visual representation," + " which serve as a foundation for category-related features." + " This class is typically used to define and manage product categories or other similar groupings within an application," + " allowing users or administrators to specify the name, description, and hierarchy of categories," + " as well as assign attributes like images, tags, or priority." + ) + + is_publicly_visible = True + + image = ImageField( + blank=True, + null=True, + help_text=_("upload an image representing this category"), + upload_to="categories/", + validators=[validate_category_image_dimensions], + verbose_name=_("category image"), + ) + markup_percent = IntegerField( + default=0, + validators=[MinValueValidator(0), MaxValueValidator(100)], + help_text=_("define a markup percentage for products in this category"), + verbose_name=_("markup percentage"), + ) + parent = TreeForeignKey( + "self", + on_delete=CASCADE, + blank=True, + null=True, + related_name="children", + help_text=_("parent of this category to form a hierarchical structure"), + verbose_name=_("parent category"), + ) + + name = CharField( + max_length=255, + verbose_name=_("category name"), + help_text=_("provide a name for this category"), + unique=True, + ) + + description = TextField( + blank=True, + null=True, + help_text=_("add a detailed description for this category"), + verbose_name=_("category description"), + ) + + slug = TweakedAutoSlugField( + populate_from=( + "parent__name", + "name", + ), + slugify_function=unicode_slugify_function, + allow_unicode=True, + unique=True, + editable=False, + max_length=88, + overwrite=True, + null=True, + verbose_name=_("Slug"), + ) + tags = ManyToManyField( + "core.CategoryTag", + blank=True, + help_text=_("tags that help describe or group this category"), + verbose_name=_("category tags"), + ) + priority = PositiveIntegerField( + default=0, + null=False, + blank=False, + verbose_name=_("priority"), + ) + + def __str__(self): + return self.name + + def get_tree_depth(self): + if self.is_leaf_node(): + return 0 + return self.get_descendants().aggregate(max_depth=Max("level"))["max_depth"] - self.get_level() + + @classmethod + def bulk_prefetch_filterable_attributes(cls, categories: Iterable["Category"]) -> None: + cat_list = [c for c in categories] + if not cat_list: + return + cat_ids = [c.id for c in cat_list if c.id] + if not cat_ids: + return + + rows = ( + AttributeValue.objects.annotate(value_length=Length("value")) + .filter( + product__is_active=True, + product__category_id__in=cat_ids, + attribute__is_active=True, + attribute__is_filterable=True, + value_length__lte=30, + ) + .values_list( + "product__category_id", + "attribute_id", + "attribute__name", + "attribute__value_type", + "value", + ) + .distinct() + ) + + per_cat: dict[Any, Any] = {} + for cat_id, attr_id, attr_name, value_type, value in rows: + cat_bucket = per_cat.get(cat_id, "") + if not cat_bucket: + cat_bucket = {} + per_cat[cat_id] = cat_bucket + bucket = cat_bucket.get(attr_id) + if bucket is None: + bucket = { + "attribute_name": attr_name, + "possible_values": [], + "value_type": value_type, + } + cat_bucket[attr_id] = bucket + if len(bucket["possible_values"]) < 128 and value not in bucket["possible_values"]: + bucket["possible_values"].append(value) + + for c in cat_list: + data = list(per_cat.get(c.id, {}).values()) + c.__dict__["filterable_attributes"] = data + + @cached_property + def filterable_attributes(self) -> list[FilterableAttribute]: + rows = ( + AttributeValue.objects.annotate(value_length=Length("value")) + .filter( + product__is_active=True, + product__category=self, + attribute__is_active=True, + attribute__is_filterable=True, + value_length__lte=30, + ) + .values_list("attribute_id", "attribute__name", "attribute__value_type", "value") + .distinct() + ) + + by_attr: dict[Any, Any] = {} + for attr_id, attr_name, value_type, value in rows: + bucket = by_attr.get(attr_id) + if bucket is None: + bucket = { + "attribute_name": attr_name, + "possible_values": [], + "value_type": value_type, + } + by_attr[attr_id] = bucket + if len(bucket["possible_values"]) < 128 and value not in bucket["possible_values"]: + bucket["possible_values"].append(value) + + return list(by_attr.values()) # type: ignore [arg-type] + + @cached_property + def image_url(self) -> str: + with suppress(ValueError): + url = str(self.image.url) + return url if "http" in url else f"https://api.{settings.BASE_DOMAIN}{url}" + return "" + + class Meta: + verbose_name = _("category") + verbose_name_plural = _("categories") + ordering = ["tree_id", "lft"] + + +class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "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." + ) + + is_publicly_visible = True + + name = CharField( + max_length=255, + help_text=_("name of this brand"), + verbose_name=_("brand name"), + unique=True, + ) + small_logo = ImageField( + upload_to="brands/", + blank=True, + null=True, + help_text=_("upload a logo representing this brand"), + validators=[validate_category_image_dimensions], + verbose_name=_("brand small image"), + ) + big_logo = ImageField( + upload_to="brands/", + blank=True, + null=True, + help_text=_("upload a big logo representing this brand"), + validators=[validate_category_image_dimensions], + verbose_name=_("brand big image"), + ) + description = TextField( + blank=True, + null=True, + help_text=_("add a detailed description of the brand"), + verbose_name=_("brand description"), + ) + categories = ManyToManyField( + "core.Category", + blank=True, + help_text=_("optional categories that this brand is associated with"), + verbose_name=_("associated categories"), + ) + slug = AutoSlugField( + populate_from=("name",), + allow_unicode=True, + unique=True, + editable=False, + max_length=88, + overwrite=True, + null=True, + slugify_function=unicode_slugify_function, + verbose_name=_("Slug"), + ) + priority = PositiveIntegerField( + default=0, + null=False, + blank=False, + verbose_name=_("priority"), + ) + + def __str__(self): + return self.name + + class Meta: + verbose_name = _("brand") + verbose_name_plural = _("brands") + + +class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents the stock of a product managed in the system." + " This class provides details about the relationship between vendors, products, and their stock information, " + "as well as inventory-related properties like price, purchase price, quantity, SKU, and digital assets." + " It is part of the inventory management system to allow tracking and evaluation of products available" + " from various vendors." + ) + + is_publicly_visible = False + + vendor = ForeignKey( + "core.Vendor", + on_delete=CASCADE, + help_text=_("the vendor supplying this product stock"), + verbose_name=_("associated vendor"), + ) + price = FloatField( + default=0.0, + help_text=_("final price to the customer after markups"), + verbose_name=_("selling price"), + ) + product = ForeignKey( + "core.Product", + on_delete=CASCADE, + help_text=_("the product associated with this stock entry"), + verbose_name=_("associated product"), + related_name="stocks", + blank=True, + null=True, + ) + purchase_price = FloatField( + default=0.0, + help_text=_("the price paid to the vendor for this product"), + verbose_name=_("vendor purchase price"), + ) + quantity = IntegerField( + default=0, + help_text=_("available quantity of the product in stock"), + verbose_name=_("quantity in stock"), + ) + sku = CharField( + max_length=255, + help_text=_("vendor-assigned SKU for identifying the product"), + verbose_name=_("vendor sku"), + ) + digital_asset = FileField( + default=None, + blank=True, + null=True, + help_text=_("digital file associated with this stock if applicable"), + verbose_name=_("digital file"), + upload_to="downloadables/", + ) + system_attributes = JSONField(default=dict, verbose_name=_("system attributes"), blank=True) + + def __str__(self) -> str: + return f"{self.vendor.name} - {self.product!s}" + + class Meta: + verbose_name = _("stock") + verbose_name_plural = _("stock entries") + + +class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a product with attributes such as category, brand, tags, digital status, name, description, part number, and slug." + " Provides related utility properties to retrieve ratings, feedback counts, price, quantity, and total orders." + " Designed for use in a system that handles e-commerce or inventory management." + " This class interacts with related models (such as Category, Brand, and ProductTag) and manages caching" + " for frequently accessed properties to improve performance. It is used to define and manipulate product data and" + " its associated information within an application." + ) + + is_publicly_visible = True + + category = ForeignKey( + "core.Category", + on_delete=CASCADE, + help_text=_("category this product belongs to"), + verbose_name=_("category"), + related_name="products", + ) + brand = ForeignKey( + "core.Brand", + on_delete=CASCADE, + blank=True, + null=True, + help_text=_("optionally associate this product with a brand"), + verbose_name=_("brand"), + ) + tags = ManyToManyField( + "core.ProductTag", + blank=True, + help_text=_("tags that help describe or group this product"), + verbose_name=_("product tags"), + ) + is_digital = BooleanField( + default=False, + help_text=_("indicates whether this product is digitally delivered"), + verbose_name=_("is product digital"), + blank=False, + null=False, + ) + name = CharField( + max_length=255, + help_text=_("provide a clear identifying name for the product"), + verbose_name=_("product name"), + db_index=True, + ) + description = TextField( + blank=True, + null=True, + help_text=_("add a detailed description of the product"), + verbose_name=_("product description"), + ) + partnumber = CharField( + unique=True, + default=None, + blank=False, + null=True, + help_text=_("part number for this product"), + verbose_name=_("part number"), + ) + slug = AutoSlugField( + populate_from=( + "name", + "brand__slug", + "category__slug", + "uuid", + ), + max_length=88, + overwrite=True, + allow_unicode=True, + unique=True, + slugify_function=unicode_slugify_function, + editable=False, + null=True, + verbose_name=_("Slug"), + ) + sku = CharField( + help_text=_("stock keeping unit for this product"), + verbose_name=_("SKU"), + max_length=8, + unique=True, + default=generate_human_readable_id, + ) + + objects = ProductManager() + + class Meta: + verbose_name = _("product") + verbose_name_plural = _("products") + indexes = [ + Index(fields=["is_active", "brand", "category"]), + Index(fields=["slug"]), + Index(fields=["sku"]), + ] + + def __str__(self): + return self.name + + @property + def promos(self) -> QuerySet["Promotion"]: + return Promotion.objects.filter( + is_active=True, + products__in=[self.pk], + ).order_by("-discount_percent") + + @cached_property + def discount_price(self) -> float | None: + return self.promos.first().discount_percent if self.promos.exists() else None # type: ignore [union-attr] + + @property + def rating(self) -> float: + feedbacks = Feedback.objects.filter(order_product__product_id=self.pk) + rating = feedbacks.aggregate(Avg("rating"))["rating__avg"] or 0 + return float(round(rating, 2)) + + @rating.setter + def rating(self, value: float): + self.__dict__["rating"] = value + + @cached_property + def feedbacks_count(self) -> int: + return Feedback.objects.filter(order_product__product_id=self.pk).count() + + @property + def price(self: Self) -> float: + stock = self.stocks.only("price").order_by("-price").first() + return round(stock.price, 2) if stock else 0.0 + + @cached_property + def quantity(self) -> int: + return self.stocks.aggregate(total=Sum("quantity"))["total"] or 0 + + @property + def total_orders(self): + return OrderProduct.objects.filter( + product__uuid=self.uuid, + status__in=["FINISHED", "DELIVERING", "CREATED", "PAYMENT"], + ).count() + + @property + def personal_orders_only(self) -> bool: + return not (self.quantity > 0 and self.price > 0.0) + + @personal_orders_only.setter + def personal_orders_only(self, value): + self.__dict__["personal_orders_only"] = value + + +class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents an attribute in the system." + " This class is used to define and manage attributes," + " which are customizable pieces of data that can be associated with other entities." + " Attributes have associated categories, groups, value types, and names." + " The model supports multiple types of values, including string, integer, float, boolean, array, and object." + " This allows for dynamic and flexible data structuring." + ) + is_publicly_visible = True + + group = ForeignKey( + "core.AttributeGroup", + on_delete=CASCADE, + related_name="attributes", + help_text=_("group of this attribute"), + verbose_name=_("attribute group"), + ) + value_type = CharField( + max_length=50, + choices=[ + ("string", _("string")), + ("integer", _("integer")), + ("float", _("float")), + ("boolean", _("boolean")), + ("array", _("array")), + ("object", _("object")), + ], + help_text=_("type of the attribute's value"), + verbose_name=_("value type"), + ) + + name = CharField( + max_length=255, + help_text=_("name of this attribute"), + verbose_name=_("attribute's name"), + ) + + is_filterable = BooleanField( + default=True, + verbose_name=_("is filterable"), + help_text=_("designates whether this attribute can be used for filtering or not"), + ) + + def __str__(self): + return self.name + + class Meta: + unique_together = ( + "name", + "group", + "value_type", + ) + verbose_name = _("attribute") + verbose_name_plural = _("attributes") + + +class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "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." + ) + + is_publicly_visible = True + + attribute = ForeignKey( + "core.Attribute", + on_delete=CASCADE, + related_name="values", + help_text=_("attribute of this value"), + verbose_name=_("attribute"), + ) + product = ForeignKey( + "core.Product", + on_delete=CASCADE, + blank=False, + null=True, + help_text=_("the specific product associated with this attribute's value"), + verbose_name=_("associated product"), + related_name="attributes", + ) + value = TextField( + verbose_name=_("attribute value"), + help_text=_("the specific value for this attribute"), + ) + + def __str__(self): + return f"{self.attribute!s}: {self.value}" + + class Meta: + verbose_name = _("attribute value") + verbose_name_plural = _("attribute values") + + +class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a product image associated with a product in the system. " + "This class is designed to manage images for products, including functionality " + "for uploading image files, associating them with specific products, and " + "determining their display order. It also includes an accessibility feature " + "with alternative text for the images." + ) + + is_publicly_visible = True + + alt = CharField( + max_length=255, + help_text=_("provide alternative text for the image for accessibility"), + verbose_name=_("image alt text"), + ) + image = ImageField( + help_text=_("upload the image file for this product"), + verbose_name=_("product image"), + upload_to=get_product_uuid_as_path, + ) + priority = PositiveIntegerField( + default=1, + help_text=_("determines the order in which images are displayed"), + verbose_name=_("display priority"), + ) + product = ForeignKey( + "core.Product", + on_delete=CASCADE, + help_text=_("the product that this image represents"), + verbose_name=_("associated product"), + related_name="images", + ) + + def get_product_uuid_as_path(self, *args): + return str(self.product.uuid) + "/" + args[0] + + def __str__(self) -> str: + return self.alt + + @cached_property + def image_url(self) -> str: + with suppress(ValueError): + url = str(self.image.url) + return url if "http" in url else f"https://api.{settings.BASE_DOMAIN}{url}" + return "" + + class Meta: + ordering = ("priority",) + verbose_name = _("product image") + verbose_name_plural = _("product images") + + +class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "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." + ) + + is_publicly_visible = True + + discount_percent = IntegerField( + validators=[MinValueValidator(1), MaxValueValidator(100)], + help_text=_("percentage discount for the selected products"), + verbose_name=_("discount percentage"), + ) + name = CharField( + max_length=256, + unique=True, + help_text=_("provide a unique name for this promotion"), + verbose_name=_("promotion name"), + ) + description = TextField( + blank=True, + null=True, + help_text=_("add a detailed description of the product"), + verbose_name=_("promotion description"), + ) + products = ManyToManyField( + "core.Product", + blank=True, + help_text=_("select which products are included in this promotion"), + verbose_name=_("included products"), + ) + + class Meta: + verbose_name = _("promotion") + verbose_name_plural = _("promotions") + + def __str__(self) -> str: + if self.name: + return self.name + return str(self.id) + + +class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a user's wishlist for storing and managing desired products. " + "The 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." + ) + + is_publicly_visible = False + + products = ManyToManyField( + "core.Product", + blank=True, + help_text=_("products that the user has marked as wanted"), + verbose_name=_("wishlisted products"), + ) + user = OneToOneField( + "vibes_auth.User", + on_delete=CASCADE, + blank=True, + null=True, + help_text=_("user who owns this wishlist"), + verbose_name=_("wishlist owner"), + related_name="user_related_wishlist", + ) + + def __str__(self): + return f"{self.user.email}'s wishlist" + + class Meta: + verbose_name = _("wishlist") + verbose_name_plural = _("wishlists") + + def add_product(self, product_uuid): + try: + product = Product.objects.get(uuid=product_uuid) + if product in self.products.all(): + return self + self.products.add(product) + except Product.DoesNotExist as dne: + name = "Product" + uuid = product_uuid + raise Http404(_(f"{name} does not exist: {uuid}")) from dne + + return self + + def remove_product(self, product_uuid): + try: + product = Product.objects.get(uuid=product_uuid) + if product not in self.products.all(): + return self + self.products.remove(product) + except Product.DoesNotExist as dne: + name = "Product" + uuid = product_uuid + raise Http404(_(f"{name} does not exist: {uuid}")) from dne + + return self + + def bulk_add_products(self, product_uuids): + self.products.add(*Product.objects.filter(uuid__in=product_uuids)) + + return self + + def bulk_remove_products(self, product_uuids): + self.products.remove(*Product.objects.filter(uuid__in=product_uuids)) + + return self + + +class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "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." + ) + + is_publicly_visible = True + + product = ForeignKey(to="core.Product", on_delete=CASCADE, related_name="documentaries") + document = FileField(upload_to=get_product_uuid_as_path) + + class Meta: + verbose_name = _("documentary") + verbose_name_plural = _("documentaries") + + def __str__(self): + return f"{self.product.name} - {self.document.name}" + + def get_product_uuid_as_path(self, *args): + return str(self.product.uuid) + "/" + args[0] + + @property + def file_type(self): + return self.document.name.split(".")[-1] or _("unresolved") + + +class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "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." + ) + + is_publicly_visible = False + + address_line = TextField( + blank=True, + null=True, + help_text=_("address line for the customer"), + verbose_name=_("address line"), + ) + street = CharField(_("street"), max_length=255, null=True) + district = CharField(_("district"), max_length=255, null=True) + city = CharField(_("city"), max_length=100, null=True) + region = CharField(_("region"), max_length=100, null=True) + postal_code = CharField(_("postal code"), max_length=20, null=True) + country = CharField(_("country"), max_length=40, null=True) + + location: PointField = PointField( + geography=True, + srid=4326, + null=True, + blank=True, + help_text=_("geolocation point: (longitude, latitude)"), + ) + + raw_data = JSONField(blank=True, null=True, help_text=_("full JSON response from geocoder for this address")) + + api_response = JSONField( + blank=True, + null=True, + help_text=_("stored JSON response from the geocoding service"), + ) + + user = ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=CASCADE, blank=True, null=True) + + objects = AddressManager() + + class Meta: + verbose_name = _("address") + verbose_name_plural = _("addresses") + indexes = [ + Index(fields=["location"]), + ] + + def __str__(self): + base = f"{self.street}, {self.city}, {self.country}" + return f"{base} for {self.user.email}" if self.user else base + + +class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents a promotional code that can be used for discounts, managing its validity, " + "type of discount, and application. " + "The PromoCode class stores details about a promotional code, including its unique " + "identifier, discount properties (amount or percentage), validity period, associated " + "user (if any), and status of its usage. It includes functionality to validate and " + "apply the promo code to an order while ensuring constraints are met." + ) + + is_publicly_visible = False + + code = CharField( + max_length=20, + unique=True, + default=get_random_code, + help_text=_("unique code used by a user to redeem a discount"), + verbose_name=_("promo code identifier"), + ) + discount_amount = DecimalField( + max_digits=10, + decimal_places=2, + blank=True, + null=True, + help_text=_("fixed discount amount applied if percent is not used"), + verbose_name=_("fixed discount amount"), + ) + discount_percent = IntegerField( + validators=[MinValueValidator(1), MaxValueValidator(100)], + blank=True, + null=True, + help_text=_("percentage discount applied if fixed amount is not used"), + verbose_name=_("percentage discount"), + ) + end_time = DateTimeField( + blank=True, + null=True, + help_text=_("timestamp when the promocode expires"), + verbose_name=_("end validity time"), + ) + start_time = DateTimeField( + blank=True, + null=True, + help_text=_("timestamp from which this promocode is valid"), + verbose_name=_("start validity time"), + ) + used_on = DateTimeField( + blank=True, + null=True, + help_text=_("timestamp when the promocode was used, blank if not used yet"), + verbose_name=_("usage timestamp"), + ) + user = ForeignKey( + "vibes_auth.User", + on_delete=CASCADE, + help_text=_("user assigned to this promocode if applicable"), + verbose_name=_("assigned user"), + null=True, + blank=True, + related_name="promocodes", + ) + + class Meta: + verbose_name = _("promo code") + verbose_name_plural = _("promo codes") + + def save( + self, + *args, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + update_modified: bool = True, + ) -> None: + if (self.discount_amount is not None and self.discount_percent is not None) or ( + self.discount_amount is None and self.discount_percent is None + ): + raise ValidationError( + _("only one type of discount should be defined (amount or percent), but not both or neither.") + ) + return super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) + + def __str__(self) -> str: + return self.code + + @property + def discount_type(self): + if self.discount_amount is not None: + return "amount" + return "percent" + + def use(self, order) -> float: + if self.used_on: + raise ValueError(_("promocode already used")) + + if not order.attributes: + order.attributes = {} + + promo_amount = order.total_price + + if self.discount_type == "percent": + promo_amount -= round(promo_amount * (float(self.discount_percent) / 100), 2) # type: ignore [arg-type] + order.attributes.update({"promocode_uuid": str(self.uuid), "final_price": promo_amount}) + order.save() + elif self.discount_type == "amount": + promo_amount -= round(float(self.discount_amount), 2) # type: ignore [arg-type] + order.attributes.update({"promocode_uuid": str(self.uuid), "final_price": promo_amount}) + order.save() + else: + raise ValueError(_(f"invalid discount type for promocode {self.uuid}")) + + self.used_on = datetime.datetime.now() + self.save() + return promo_amount + + +class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents an order placed by a user." + " This class models an order within the application," + " including its various attributes such as billing and shipping information," + " status, associated user, notifications, and related operations." + " Orders can have associated products, promotions can be applied, addresses set," + " and shipping or billing details updated." + " Equally, functionality supports managing the products in the order lifecycle." + ) + + is_publicly_visible = False + + billing_address = ForeignKey( + "core.Address", + on_delete=CASCADE, + blank=True, + null=True, + related_name="billing_address_order", + help_text=_("the billing address used for this order"), + verbose_name=_("billing address"), + ) + promo_code = ForeignKey( + "core.PromoCode", + on_delete=PROTECT, + blank=True, + null=True, + help_text=_("optional promo code applied to this order"), + verbose_name=_("applied promo code"), + ) + shipping_address = ForeignKey( + "core.Address", + on_delete=CASCADE, + blank=True, + null=True, + related_name="shipping_address_order", + help_text=_("the shipping address used for this order"), + verbose_name=_("shipping address"), + ) + status = CharField( + default="PENDING", + max_length=64, + choices=ORDER_STATUS_CHOICES, + help_text=_("current status of the order in its lifecycle"), + verbose_name=_("order status"), + ) + notifications = JSONField( + blank=True, + null=True, + help_text=_("json structure of notifications to display to users"), + verbose_name=_("notifications"), + ) + attributes = JSONField( + blank=True, + null=True, + help_text=_("json representation of order attributes for this order"), + verbose_name=_("attributes"), + ) + user = ForeignKey( + "vibes_auth.User", + on_delete=CASCADE, + help_text=_("the user who placed the order"), + verbose_name=_("user"), + related_name="orders", + blank=True, + null=True, + ) + buy_time = DateTimeField( + help_text=_("the timestamp when the order was finalized"), + verbose_name=_("buy time"), + default=None, + null=True, + blank=True, + ) + human_readable_id = CharField( + max_length=8, + help_text=_("a human-readable identifier for the order"), + verbose_name=_("human readable id"), + unique=True, + default=generate_human_readable_id, + ) + + class Meta: + verbose_name = _("order") + verbose_name_plural = _("orders") + indexes = [ + Index(fields=["user", "status"]), + Index(fields=["status", "buy_time"]), + ] + + def __str__(self) -> str: + return f"#{self.human_readable_id} for {self.user.email if self.user else 'unregistered user'}" + + @property + def is_business(self) -> bool: + if type(self.attributes) is not dict: + self.attributes = {} + self.save() + return False + if self.user: + if type(self.user.attributes) is not dict: + self.user.attributes = {} + self.user.save() + return False + with suppress(Exception): + return (self.attributes.get("is_business", False) if self.attributes else False) or ( + (self.user.attributes.get("is_business", False) and self.user.attributes.get("business_identificator")) # type: ignore [union-attr] + if self.user + else False + ) + return False + + def save( + self, + *args, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + update_modified: bool = True, + ) -> None: + pending_orders = 0 + if self.user: + pending_orders = self.user.orders.filter(status="PENDING").count() + if self.status == "PENDING" and pending_orders > 1: + raise ValueError(_("a user must have only one pending order at a time")) + return super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) + + @property + def total_price(self) -> float: + total = self.order_products.exclude(status__in=FAILED_STATUSES).aggregate( + total=Sum(F("buy_price") * F("quantity"), output_field=FloatField()) + )["total"] + + return round(total or 0.0, 2) + + @property + def total_quantity(self) -> int: + total = self.order_products.aggregate(total=Sum("quantity"))["total"] + return total or 0 + + def add_product( + self, + product_uuid=None, + attributes: list | dict | None = None, + update_quantity=True, + ): + if attributes is None: + attributes = [] + + if self.status not in ["PENDING", "MOMENTAL"]: + raise ValueError(_("you cannot add products to an order that is not a pending one")) + try: + product = Product.objects.get(uuid=product_uuid) + + if not product.is_active: + raise BadRequest(_("you cannot add inactive products to order")) + + buy_price = product.price + + promotions = Promotion.objects.filter(is_active=True, products__in=[product]).order_by("discount_percent") + + if promotions.exists(): + buy_price -= round(product.price * (promotions.first().discount_percent / 100), 2) # type: ignore [union-attr] + + order_product, is_created = OrderProduct.objects.get_or_create( + product=product, + order=self, + attributes=json.dumps(attributes), + defaults={"quantity": 1, "buy_price": product.price}, + ) + if not is_created and update_quantity: + if product.quantity < order_product.quantity + 1: + raise BadRequest(_("you cannot add more products than available in stock")) + order_product.quantity += 1 + order_product.buy_price = product.price + order_product.save() + + return self + + except Product.DoesNotExist as dne: + name = "Product" + uuid = product_uuid + raise Http404(_(f"{name} does not exist: {uuid}")) from dne + + def remove_product( + self, + product_uuid=None, + attributes=None, + zero_quantity=False, + ): + if attributes is None: + attributes = {} + + if self.status not in ["PENDING", "MOMENTAL"]: + raise ValueError(_("you cannot remove products from an order that is not a pending one")) + try: + product = Product.objects.get(uuid=product_uuid) + order_product = self.order_products.get(product=product, order=self) + if zero_quantity: + order_product.delete() + return self + if order_product.quantity == 1: + self.order_products.remove(order_product) + order_product.delete() + else: + order_product.quantity -= 1 + order_product.save() + return self + except Product.DoesNotExist as dne: + name = "Product" + uuid = product_uuid + raise Http404(_(f"{name} does not exist: {uuid}")) from dne + except OrderProduct.DoesNotExist as dne: + name = "OrderProduct" + query = f"product: {product_uuid}, order: {self.uuid}, attributes: {attributes}" + raise Http404(_(f"{name} does not exist with query <{query}>")) from dne + + def remove_all_products(self): + if self.status not in ["PENDING", "MOMENTAL"]: + raise ValueError(_("you cannot remove products from an order that is not a pending one")) + for order_product in self.order_products.all(): + self.order_products.remove(order_product) + order_product.delete() + return self + + def remove_products_of_a_kind(self, product_uuid): + if self.status not in ["PENDING", "MOMENTAL"]: + raise ValueError(_("you cannot remove products from an order that is not a pending one")) + try: + product = Product.objects.get(uuid=product_uuid) + order_product = self.order_products.get(product=product, order=self) + self.order_products.remove(order_product) + order_product.delete() + except Product.DoesNotExist as dne: + name = "Product" + uuid = product_uuid + raise Http404(_(f"{name} does not exist: {uuid}")) from dne + return self + + @property + def is_whole_digital(self): + return self.order_products.count() == self.order_products.filter(product__is_digital=True).count() + + def apply_promocode(self, promocode_uuid): + try: + promocode = PromoCode.objects.get(uuid=promocode_uuid) + except PromoCode.DoesNotExist as dne: + raise Http404(_("promocode does not exist")) from dne + return promocode.use(self) + + def apply_addresses(self, billing_address_uuid: str | None = None, shipping_address_uuid: str | None = None): + try: + if not any([shipping_address_uuid, billing_address_uuid]) and not self.is_whole_digital: + raise ValueError(_("you can only buy physical products with shipping address specified")) + + if billing_address_uuid and not shipping_address_uuid: + shipping_address = Address.objects.get(uuid=billing_address_uuid) + billing_address = shipping_address + + elif shipping_address_uuid and not billing_address_uuid: + billing_address = Address.objects.get(uuid=shipping_address_uuid) + shipping_address = billing_address + + else: + billing_address = Address.objects.get(uuid=str(billing_address_uuid)) + shipping_address = Address.objects.get(uuid=str(shipping_address_uuid)) + + self.billing_address = billing_address + self.shipping_address = shipping_address + self.save() + + except Address.DoesNotExist as dne: + raise Http404(_("address does not exist")) from dne + + def buy( + self, + force_balance: bool = False, + force_payment: bool = False, + promocode_uuid: str | None = None, + billing_address: str | None = None, + shipping_address: str | None = None, + chosen_products: list | None = None, + ) -> Self | Transaction | None: + order = self + + if not self.attributes or type(self.attributes) is not dict: + self.attributes = {} + + if chosen_products: + order = Order.objects.create(status="MOMENTAL", user=self.user) + order.bulk_add_products(chosen_products, update_quantity=True) + + if config.DISABLED_COMMERCE: + raise DisabledCommerceError(_("you can not buy at this moment, please try again in a few minutes")) + + if (not force_balance and not force_payment) or (force_balance and force_payment): + raise ValueError(_("invalid force value")) + + if any([billing_address, shipping_address]): + order.apply_addresses(billing_address, shipping_address) + + if order.total_quantity < 1: + raise ValueError(_("you cannot purchase an empty order!")) + + force = None + + if force_balance: + force = "balance" + + if force_payment: + force = "payment" + + amount = self.attributes.get("final_amount") or order.total_price + + if self.attributes.get("promocode_uuid") and not self.attributes.get("final_amount"): + amount = order.apply_promocode(self.attributes.get("promocode_uuid")) + + if promocode_uuid and not self.attributes.get("final_amount"): + amount = order.apply_promocode(promocode_uuid) + + if not order.user: + raise ValueError(_("you cannot buy an order without a user")) + + if type(order.user.attributes) is dict: + if order.user.attributes.get("is_business", False) or order.user.attributes.get( + "business_identificator", "" + ): + if type(order.attributes) is not dict: + order.attributes = {} + order.attributes.update({"is_business": True}) + else: + order.user.attributes = {} + order.user.save() + + if not order.user.payments_balance: + raise ValueError(_("a user without a balance cannot buy with balance")) + + match force: + case "balance": + if order.user.payments_balance.amount < amount: + raise NotEnoughMoneyError(_("insufficient funds to complete the order")) + with transaction.atomic(): + order.status = "CREATED" + order.buy_time = timezone.now() + order.update_order_products_statuses("DELIVERING") + order.save() + return order + case "payment": + order.status = "PAYMENT" + order.buy_time = timezone.now() + order.save() + return Transaction.objects.create( + balance=order.user.payments_balance, + amount=amount, + currency=settings.CURRENCY_CODE, + order=order, + ) + case _: + raise ValueError(_("invalid force value")) + + def buy_without_registration(self, products: list, promocode_uuid, **kwargs) -> Transaction | None: + if config.DISABLED_COMMERCE: + raise DisabledCommerceError(_("you can not buy at this moment, please try again in a few minutes")) + + if len(products) < 1: + raise ValueError(_("you cannot purchase an empty order!")) + + customer_name = kwargs.get("customer_name") or kwargs.get("business_identificator") + customer_email = kwargs.get("customer_email") + customer_phone_number = kwargs.get("customer_phone_number") + + if not all([customer_name, customer_email, customer_phone_number]): + raise ValueError( + _( + "you cannot buy without registration, please provide the following information:" + " customer name, customer email, customer phone number" + ) + ) + + payment_method = kwargs.get("payment_method") + available_payment_methods = cache.get("payment_methods").get("payment_methods") + + if payment_method not in available_payment_methods: + raise ValueError(_(f"invalid payment method: {payment_method} from {available_payment_methods}")) + + billing_customer_address_uuid = kwargs.get("billing_customer_address") + shipping_customer_address_uuid = kwargs.get("shipping_customer_address") + + self.apply_addresses(billing_customer_address_uuid, shipping_customer_address_uuid) + + for product_uuid in products: + self.add_product(product_uuid) + + amount = self.apply_promocode(promocode_uuid) if promocode_uuid else self.total_price + + self.status = "CREATED" + + if self.attributes is None: + self.attributes = {} + + self.attributes.update( + { + "customer_name": customer_name, + "customer_email": customer_email, + "customer_phone_number": customer_phone_number, + "is_business": kwargs.get("is_business", False), + } + ) + + self.save() + + return Transaction.objects.create( + amount=amount, + currency=settings.CURRENCY_CODE, + order=self, + payment_method=kwargs.get("payment_method"), + ) + + def finalize(self): + if ( + self.order_products.filter( + status__in=[ + "ACCEPTED", + "FAILED", + "RETURNED", + "CANCELED", + "FINISHED", + ] + ).count() + == self.order_products.count() + ): + self.status = "FINISHED" + self.save() + + def update_order_products_statuses(self, status: str = "PENDING"): + self.order_products.update(status=status) + + def bulk_add_products(self, products: list[dict[str, Any]], update_quantity: bool = False): + for product in products: + self.add_product( + product.get("uuid") or product.get("product_uuid"), + attributes=product.get("attributes"), + update_quantity=update_quantity, + ) + return self + + def bulk_remove_products(self, products: list): + for product in products: + self.remove_product( + product.get("uuid") or product.get("product_uuid"), + attributes=product.get("attributes"), + zero_quantity=True, + ) + return self + + def trigger_crm(self): + crm_links = OrderCrmLink.objects.filter(order=self) + if crm_links.exists(): + crm_link = crm_links.first() + crm_integration = create_object(crm_link.crm.integration_location, crm_link.crm.name) + try: + crm_integration.process_order_changes(self) + return True + except Exception as e: + logger.error( + "failed to trigger CRM integration %s for order %s: %s", + crm_link.crm.name, + self.uuid, + str(e), + exc_info=True, + ) + return False + else: + crm = CustomerRelationshipManagementProvider.objects.get(default=True) + crm_integration = create_object(crm.integration_location, crm.name) + try: + crm_integration.process_order_changes(self) + return True + except Exception as e: + logger.error( + "failed to trigger CRM integration %s for order %s: %s", crm.name, self.uuid, str(e), exc_info=True + ) + return False + + @property + def business_identificator(self) -> str | None: + if self.attributes: + return self.attributes.get("business_identificator") or self.attributes.get("businessIdentificator") + if self.user: + if self.user.attributes: + return self.user.attributes.get("business_identificator") or self.user.attributes.get( + "businessIdentificator" + ) + return None + + +class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Manages user feedback for products. " + "This class is designed to capture and store user feedback for specific products " + "that they have purchased. It contains attributes to store user comments, " + "a reference to the related product in the order, and a user-assigned rating. The " + "class uses database fields to effectively model and manage feedback data." + ) + + is_publicly_visible = True + + comment = TextField( + blank=True, + null=True, + help_text=_("user-provided comments about their experience with the product"), + verbose_name=_("feedback comments"), + ) + order_product = OneToOneField( + "core.OrderProduct", + on_delete=CASCADE, + blank=False, + null=False, + help_text=_("references the specific product in an order that this feedback is about"), + verbose_name=_("related order product"), + ) + rating = FloatField( + blank=True, + null=True, + help_text=_("user-assigned rating for the product"), + verbose_name=_("product rating"), + validators=[MinValueValidator(0), MaxValueValidator(10)], + ) + + def __str__(self) -> str: + if self.order_product and self.order_product.order and self.order_product.order.user: + return f"{self.rating} by {self.order_product.order.user.email}" + return f"{self.rating} | {self.uuid}" + + class Meta: + verbose_name = _("feedback") + verbose_name_plural = _("feedbacks") + + +class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "Represents products associated with orders and their attributes. " + "The OrderProduct model maintains information about a product that is part of an order, " + "including details such as purchase price, quantity, product attributes, and status. It " + "manages notifications for the user and administrators and handles operations such as " + "returning the product balance or adding feedback. This model also provides methods and " + "properties that support business logic, such as calculating the total price or generating " + "a download URL for digital products. The model integrates with the Order and Product models " + "and stores a reference to them." + ) + + is_publicly_visible = False + + buy_price = FloatField( + blank=True, + null=True, + help_text=_("the price paid by the customer for this product at purchase time"), + verbose_name=_("purchase price at order time"), + ) + comments = TextField( + blank=True, + null=True, + help_text=_("internal comments for admins about this ordered product"), + verbose_name=_("internal comments"), + ) + notifications = JSONField( + blank=True, + null=True, + help_text=_("json structure of notifications to display to users"), + verbose_name=_("user notifications"), + ) + attributes = JSONField( + blank=True, + null=True, + help_text=_("json representation of this item's attributes"), + verbose_name=_("ordered product attributes"), + ) + order = ForeignKey( + "core.Order", + on_delete=CASCADE, + help_text=_("reference to the parent order that contains this product"), + verbose_name=_("parent order"), + related_name="order_products", + null=True, + ) + product = ForeignKey( + "core.Product", + on_delete=PROTECT, + blank=True, + null=True, + help_text=_("the specific product associated with this order line"), + verbose_name=_("associated product"), + ) + quantity = PositiveIntegerField( + blank=False, + null=False, + default=1, + help_text=_("quantity of this specific product in the order"), + verbose_name=_("product quantity"), + ) + status = CharField( + max_length=128, + blank=False, + null=False, + choices=ORDER_PRODUCT_STATUS_CHOICES, + help_text=_("current status of this product in the order"), + verbose_name=_("product line status"), + default="PENDING", + ) + + def __str__(self) -> str: + return ( + f"{self.product.name if self.product else self.uuid}" + f" for ({self.order.user.email if self.order and self.order.user else 'unregistered user'})" + ) + + class Meta: + verbose_name = _("order product") + verbose_name_plural = _("order products") + indexes = [ + GinIndex(fields=["notifications", "attributes"]), + Index(fields=["order", "status"]), + Index(fields=["product", "status"]), + ] + + def return_balance_back(self): + self.status = "RETURNED" + self.save() + self.order.user.payments_balance.amount += self.buy_price + self.order.user.payments_balance.save() + + def add_error(self, error=None): + if self.notifications is not None: + order_product_errors = self.notifications.get("errors", []) + if not order_product_errors: + self.notifications.update( + { + "errors": [ + { + "detail": ( + error if error else f"Something went wrong with {self.uuid} for some reason..." + ) + }, + ] + } + ) + else: + order_product_errors.append({"detail": error}) + self.notifications.update({"errors": order_product_errors}) + else: + self.notifications = {"errors": [{"detail": error}]} + self.status = "FAILED" + self.save() + return self + + @property + def total_price(self: Self) -> float: + return round(float(self.buy_price) * self.quantity, 2) # type: ignore [arg-type] + + @property + def download_url(self: Self) -> str: + if self.product and self.product.stocks: + if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore [union-attr] + if hasattr(self, "download"): + return self.download.url + else: + return DigitalAssetDownload.objects.create(order_product=self).url + return "" + + def do_feedback(self, rating=10, comment="", action="add") -> Feedback | int | None: + if not self.order: + raise ValueError(_("order product must have an order")) + if action not in ["add", "remove"]: + raise ValueError(_(f"wrong action specified for feedback: {action}")) + + feedback_qs = Feedback.objects.filter(order_product=self) + feedback_exists = feedback_qs.exists() + + if action == "remove": + if feedback_exists: + return feedback_qs.delete()[0] + + if action == "add": + if not feedback_exists: + if self.order.status == "FINISHED": + return Feedback.objects.create(rating=rating, comment=comment, order_product=self) + else: + raise ValueError(_("you cannot feedback an order which is not received")) + + return None + + +class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_provider"), NiceModel): # type: ignore [misc] + name = CharField(max_length=128, unique=True, verbose_name=_("name")) + integration_url = URLField(blank=True, null=True, help_text=_("URL of the integration")) + authentication = JSONField(blank=True, null=True, help_text=_("authentication credentials")) + attributes = JSONField(blank=True, null=True, verbose_name=_("attributes")) + integration_location = CharField(max_length=128, blank=True, null=True) + default = BooleanField(default=False) + + def __str__(self) -> str: + return self.name + + def save( + self, + *args, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + update_modified: bool = True, + ) -> None: + if self.default: + qs = type(self).objects.all() + if self.pk: + qs = qs.exclude(pk=self.pk) + if qs.filter(default=True).exists(): + raise ValueError(_("you can only have one default CRM provider")) + super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) + + class Meta: + verbose_name = _("CRM") + verbose_name_plural = _("CRMs") + + +class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): # type: ignore + order = ForeignKey(to=Order, on_delete=PROTECT, related_name="crm_links") + crm = ForeignKey(to=CustomerRelationshipManagementProvider, on_delete=PROTECT, related_name="order_links") + crm_lead_id = CharField(max_length=30, unique=True, db_index=True) + + def __str__(self) -> str: + return self.crm_lead_id + + class Meta: + verbose_name = _("order CRM link") + verbose_name_plural = _("orders CRM links") + + +class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc] + __doc__ = _( # type: ignore + "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." + ) + + is_publicly_visible = False + + order_product = OneToOneField(to=OrderProduct, on_delete=CASCADE, related_name="download") + num_downloads = IntegerField(default=0) + + class Meta: + verbose_name = _("download") + verbose_name_plural = _("downloads") + + def __str__(self): + return f"{self.order_product} - {self.num_downloads}" + + @property + def url(self): + return ( + f"https://api.{settings.BASE_DOMAIN}/download/{urlsafe_base64_encode(force_bytes(self.order_product.uuid))}" + ) diff --git a/core/permissions.py b/engine/core/permissions.py similarity index 98% rename from core/permissions.py rename to engine/core/permissions.py index a462229b..ff1f9c92 100644 --- a/core/permissions.py +++ b/engine/core/permissions.py @@ -47,6 +47,9 @@ class EvibesPermission(permissions.BasePermission): app_label = model._meta.app_label model_name = model._meta.model_name + if view.additional.get(action) == "ALLOW": + return True + if action == "create" and view.additional.get("create") == "ALLOW": return True diff --git a/core/serializers/__init__.py b/engine/core/serializers/__init__.py similarity index 100% rename from core/serializers/__init__.py rename to engine/core/serializers/__init__.py diff --git a/core/serializers/detail.py b/engine/core/serializers/detail.py similarity index 71% rename from core/serializers/detail.py rename to engine/core/serializers/detail.py index 87e20964..b92d4b98 100644 --- a/core/serializers/detail.py +++ b/engine/core/serializers/detail.py @@ -1,15 +1,13 @@ import logging from contextlib import suppress +from typing import Any -from django.contrib.auth.models import AnonymousUser -from django.core.cache import cache -from django.db.models.functions import Length +from drf_spectacular.utils import extend_schema_field from rest_framework.fields import JSONField, SerializerMethodField -from rest_framework.request import Request -from rest_framework.serializers import ModelSerializer +from rest_framework.serializers import ListSerializer, ModelSerializer from rest_framework_recursive.fields import RecursiveField -from core.models import ( +from engine.core.models import ( Attribute, AttributeGroup, AttributeValue, @@ -27,11 +25,11 @@ from core.models import ( Vendor, Wishlist, ) -from core.serializers.simple import CategorySimpleSerializer, ProductSimpleSerializer -from core.serializers.utility import AddressSerializer -from vibes_auth.models import User +from engine.core.serializers.simple import CategorySimpleSerializer, ProductSimpleSerializer +from engine.core.serializers.utility import AddressSerializer +from engine.core.typing import FilterableAttribute -logger = logging.getLogger("evibes") +logger = logging.getLogger(__name__) class AttributeGroupDetailSerializer(ModelSerializer): @@ -48,13 +46,21 @@ class AttributeGroupDetailSerializer(ModelSerializer): ] +class CategoryDetailListSerializer(ListSerializer): + def to_representation(self, data): # type: ignore[override] + items = list(data) + with suppress(Exception): + Category.bulk_prefetch_filterable_attributes(items) + return super().to_representation(items) + + class CategoryDetailSerializer(ModelSerializer): children = SerializerMethodField() - image = SerializerMethodField() filterable_attributes = SerializerMethodField() class Meta: model = Category + list_serializer_class = CategoryDetailListSerializer fields = [ "uuid", "name", @@ -68,65 +74,22 @@ class CategoryDetailSerializer(ModelSerializer): "modified", ] - def get_image(self, obj: Category) -> str | None: - with suppress(ValueError): - return obj.image.url - return None + def get_filterable_attributes(self, obj: Category) -> list[FilterableAttribute]: + return obj.filterable_attributes - def get_filterable_attributes(self, obj: Category) -> list[dict]: - filterable_results = cache.get(f"{obj.uuid}_filterable_results", []) - - if filterable_results: - return filterable_results - - request: Request | None = self.context.get("request") - user: User | AnonymousUser | None = getattr(request, "user") # noqa: B009 - - if user is None: - user = AnonymousUser() - - attributes = obj.attributes.all() if user.has_perm("view_attribute") else obj.attributes.filter(is_active=True) - - for attr in attributes: - distinct_vals = ( - AttributeValue.objects.annotate(value_length=Length("value")) - .filter(attribute=attr, product__category=obj, value_length__lte=30) - .values_list("value", flat=True) - .distinct() - ) - - distinct_vals_list = list(distinct_vals)[0:128] if len(list(distinct_vals)) > 128 else list(distinct_vals) - - filterable_results.append( - { - "attribute_name": attr.name, - "possible_values": distinct_vals_list, - "value_type": attr.value_type, - } - ) - - if user is None: - user = AnonymousUser() - - if not user.has_perm("view_attribute"): - cache.set(f"{obj.uuid}_filterable_results", filterable_results, 86400) - - return filterable_results - - def get_children(self, obj) -> list: + @extend_schema_field(CategorySimpleSerializer(many=True)) + def get_children(self, obj: Category) -> list[dict[str, Any]]: request = self.context.get("request") if request is not None and request.user.has_perm("view_category"): children = obj.children.all() else: children = obj.children.filter(is_active=True) - return CategoryDetailSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] + return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] # type: ignore [return-value] class BrandDetailSerializer(ModelSerializer): categories = CategorySimpleSerializer(many=True) - small_logo = SerializerMethodField() - big_logo = SerializerMethodField() class Meta: model = Brand @@ -140,21 +103,8 @@ class BrandDetailSerializer(ModelSerializer): "small_logo", ] - def get_small_logo(self, obj: Brand) -> str | None: - with suppress(ValueError): - return obj.small_logo.url - return None - - def get_big_logo(self, obj: Brand) -> str | None: - with suppress(ValueError): - return obj.big_logo.url - return None - class BrandProductDetailSerializer(ModelSerializer): - small_logo = SerializerMethodField() - big_logo = SerializerMethodField() - class Meta: model = Brand fields = [ @@ -166,16 +116,6 @@ class BrandProductDetailSerializer(ModelSerializer): "small_logo", ] - def get_small_logo(self, obj: Brand) -> str | None: - with suppress(ValueError): - return obj.small_logo.url - return None - - def get_big_logo(self, obj: Brand) -> str | None: - with suppress(ValueError): - return obj.big_logo.url - return None - class ProductTagDetailSerializer(ModelSerializer): class Meta: @@ -190,8 +130,6 @@ class ProductTagDetailSerializer(ModelSerializer): class ProductImageDetailSerializer(ModelSerializer): - image = SerializerMethodField() - class Meta: model = ProductImage fields = [ @@ -203,9 +141,6 @@ class ProductImageDetailSerializer(ModelSerializer): "modified", ] - def get_image(self, obj: ProductImage) -> str: - return obj.image.url or "" - class AttributeDetailSerializer(ModelSerializer): categories = CategoryDetailSerializer(many=True) @@ -317,11 +252,14 @@ class ProductDetailSerializer(ModelSerializer): price = SerializerMethodField() quantity = SerializerMethodField() feedbacks_count = SerializerMethodField() + discount_price = SerializerMethodField() + personal_orders_only = SerializerMethodField() class Meta: model = Product fields = [ "uuid", + "sku", "name", "description", "partnumber", @@ -338,6 +276,8 @@ class ProductDetailSerializer(ModelSerializer): "price", "created", "modified", + "discount_price", + "personal_orders_only", ] def get_rating(self, obj: Product) -> float: @@ -349,9 +289,15 @@ class ProductDetailSerializer(ModelSerializer): def get_feedbacks_count(self, obj: Product) -> int: return obj.feedbacks_count + def get_personal_orders_only(self, obj: Product) -> bool: + return obj.personal_orders_only + def get_quantity(self, obj: Product) -> int: return obj.quantity + def get_discount_price(self, obj: Product) -> float | None: + return obj.discount_price + class PromotionDetailSerializer(ModelSerializer): products = ProductDetailSerializer( diff --git a/engine/core/serializers/seo.py b/engine/core/serializers/seo.py new file mode 100644 index 00000000..046fa1c7 --- /dev/null +++ b/engine/core/serializers/seo.py @@ -0,0 +1,13 @@ +from rest_framework.fields import CharField, DictField, ListField +from rest_framework.serializers import Serializer + + +class SeoSnapshotSerializer(Serializer): + title = CharField() + description = CharField() + canonical = CharField() + robots = CharField() + hreflang = CharField() + open_graph = DictField() + twitter = DictField() + json_ld = ListField(child=DictField()) diff --git a/core/serializers/simple.py b/engine/core/serializers/simple.py similarity index 71% rename from core/serializers/simple.py rename to engine/core/serializers/simple.py index 6f9e01ce..0d77925a 100644 --- a/core/serializers/simple.py +++ b/engine/core/serializers/simple.py @@ -1,10 +1,10 @@ -from contextlib import suppress +from typing import Any from rest_framework.fields import JSONField, SerializerMethodField from rest_framework.relations import PrimaryKeyRelatedField from rest_framework.serializers import ModelSerializer -from core.models import ( +from engine.core.models import ( Attribute, AttributeGroup, AttributeValue, @@ -22,12 +22,12 @@ from core.models import ( Vendor, Wishlist, ) -from core.serializers.utility import AddressSerializer +from engine.core.serializers.utility import AddressSerializer -class AttributeGroupSimpleSerializer(ModelSerializer): - parent: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore - children: PrimaryKeyRelatedField = PrimaryKeyRelatedField(many=True, read_only=True) # type: ignore +class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + parent = PrimaryKeyRelatedField(read_only=True) # type: ignore [assignment, var-annotated] + children = PrimaryKeyRelatedField(many=True, read_only=True) # type: ignore [assignment, var-annotated] class Meta: model = AttributeGroup @@ -39,9 +39,8 @@ class AttributeGroupSimpleSerializer(ModelSerializer): ] -class CategorySimpleSerializer(ModelSerializer): +class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg] children = SerializerMethodField() - image = SerializerMethodField() class Meta: model = Category @@ -53,25 +52,17 @@ class CategorySimpleSerializer(ModelSerializer): "children", ] - def get_image(self, obj: Category) -> str | None: - with suppress(ValueError): - return obj.image.url - return None - - def get_children(self, obj) -> list: + def get_children(self, obj: Category) -> dict[str, Any]: request = self.context.get("request") if request is not None and request.user.has_perm("view_category"): children = obj.children.all() else: children = obj.children.filter(is_active=True) - return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] + return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] # type: ignore [return-value] -class BrandSimpleSerializer(ModelSerializer): - small_logo = SerializerMethodField() - big_logo = SerializerMethodField() - +class BrandSimpleSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = Brand fields = [ @@ -81,18 +72,8 @@ class BrandSimpleSerializer(ModelSerializer): "big_logo", ] - def get_small_logo(self, obj: Brand) -> str | None: - with suppress(ValueError): - return obj.small_logo.url - return None - def get_big_logo(self, obj: Brand) -> str | None: - with suppress(ValueError): - return obj.big_logo.url - return None - - -class ProductTagSimpleSerializer(ModelSerializer): +class ProductTagSimpleSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = ProductTag fields = [ @@ -102,8 +83,8 @@ class ProductTagSimpleSerializer(ModelSerializer): ] -class ProductImageSimpleSerializer(ModelSerializer): - product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class ProductImageSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] class Meta: model = ProductImage @@ -116,7 +97,7 @@ class ProductImageSimpleSerializer(ModelSerializer): ] -class AttributeSimpleSerializer(ModelSerializer): +class AttributeSimpleSerializer(ModelSerializer): # type: ignore [type-arg] group = AttributeGroupSimpleSerializer(read_only=True) class Meta: @@ -129,9 +110,9 @@ class AttributeSimpleSerializer(ModelSerializer): ] -class AttributeValueSimpleSerializer(ModelSerializer): +class AttributeValueSimpleSerializer(ModelSerializer): # type: ignore [type-arg] attribute = AttributeSimpleSerializer(read_only=True) - product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) + product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] class Meta: model = AttributeValue @@ -143,7 +124,7 @@ class AttributeValueSimpleSerializer(ModelSerializer): ] -class ProductSimpleSerializer(ModelSerializer): +class ProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg] brand = BrandSimpleSerializer(read_only=True) category = CategorySimpleSerializer(read_only=True) tags = ProductTagSimpleSerializer(many=True, read_only=True) @@ -155,18 +136,22 @@ class ProductSimpleSerializer(ModelSerializer): price = SerializerMethodField() quantity = SerializerMethodField() feedbacks_count = SerializerMethodField() + personal_orders_only = SerializerMethodField() + discount_price = SerializerMethodField() class Meta: model = Product fields = [ "uuid", "name", + "sku", "is_digital", "slug", "description", "partnumber", "brand", "feedbacks_count", + "personal_orders_only", "category", "tags", "images", @@ -174,6 +159,7 @@ class ProductSimpleSerializer(ModelSerializer): "rating", "price", "quantity", + "discount_price", ] def get_rating(self, obj: Product) -> float: @@ -188,8 +174,14 @@ class ProductSimpleSerializer(ModelSerializer): def get_quantity(self, obj: Product) -> int: return obj.quantity + def get_personal_orders_only(self, obj: Product) -> bool: + return obj.personal_orders_only -class VendorSimpleSerializer(ModelSerializer): + def get_discount_price(self, obj: Product) -> float | None: + return obj.discount_price + + +class VendorSimpleSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = Vendor fields = [ @@ -198,7 +190,7 @@ class VendorSimpleSerializer(ModelSerializer): ] -class StockSimpleSerializer(ModelSerializer): +class StockSimpleSerializer(ModelSerializer): # type: ignore [type-arg] vendor = VendorSimpleSerializer(read_only=True) product = ProductSimpleSerializer(read_only=True) @@ -215,7 +207,7 @@ class StockSimpleSerializer(ModelSerializer): ] -class PromoCodeSimpleSerializer(ModelSerializer): +class PromoCodeSimpleSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = PromoCode fields = [ @@ -224,7 +216,7 @@ class PromoCodeSimpleSerializer(ModelSerializer): ] -class PromotionSimpleSerializer(ModelSerializer): +class PromotionSimpleSerializer(ModelSerializer): # type: ignore [type-arg] products = ProductSimpleSerializer(many=True, read_only=True) class Meta: @@ -237,8 +229,8 @@ class PromotionSimpleSerializer(ModelSerializer): ] -class WishlistSimpleSerializer(ModelSerializer): - user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class WishlistSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] products = ProductSimpleSerializer(many=True, read_only=True) class Meta: @@ -250,8 +242,8 @@ class WishlistSimpleSerializer(ModelSerializer): ] -class FeedbackSimpleSerializer(ModelSerializer): - order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class FeedbackSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] class Meta: model = Feedback @@ -262,7 +254,7 @@ class FeedbackSimpleSerializer(ModelSerializer): ] -class OrderProductSimpleSerializer(ModelSerializer): +class OrderProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg] product = ProductSimpleSerializer(read_only=True) class Meta: @@ -276,8 +268,8 @@ class OrderProductSimpleSerializer(ModelSerializer): ] -class OrderSimpleSerializer(ModelSerializer): - user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class OrderSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] promo_code = PromoCodeSimpleSerializer(read_only=True) order_products = OrderProductSimpleSerializer(many=True, read_only=True) billing_address = AddressSerializer(read_only=True, required=False) diff --git a/core/serializers/utility.py b/engine/core/serializers/utility.py similarity index 65% rename from core/serializers/utility.py rename to engine/core/serializers/utility.py index 0fc2437e..94dcb8d5 100644 --- a/core/serializers/utility.py +++ b/engine/core/serializers/utility.py @@ -1,3 +1,5 @@ +from typing import Any + from django.utils.translation import gettext_lazy as _ from rest_framework.exceptions import ValidationError from rest_framework.fields import ( @@ -13,22 +15,22 @@ from rest_framework.fields import ( ) from rest_framework.serializers import ListSerializer, ModelSerializer, Serializer -from core.models import Address +from engine.core.models import Address -class AddressAutocompleteInputSerializer(Serializer): +class AddressAutocompleteInputSerializer(Serializer): # type: ignore [type-arg] q = CharField(required=True) limit = IntegerField(required=False, min_value=1, max_value=10, default=5) -class AddressSuggestionSerializer(Serializer): +class AddressSuggestionSerializer(Serializer): # type: ignore [type-arg] display_name = CharField() lat = FloatField() lon = FloatField() address = DictField(child=CharField()) -class AddressSerializer(ModelSerializer): +class AddressSerializer(ModelSerializer): # type: ignore [type-arg] latitude = FloatField(source="location.y", read_only=True) longitude = FloatField(source="location.x", read_only=True) @@ -57,43 +59,44 @@ class AddressSerializer(ModelSerializer): ] -class AddressCreateSerializer(ModelSerializer): +class AddressCreateSerializer(ModelSerializer): # type: ignore [type-arg] raw_data = CharField( write_only=True, max_length=512, ) - address_line_1 = CharField(write_only=True, max_length=128, required=False) + address_line_1 = CharField(write_only=True, max_length=128, required=True) address_line_2 = CharField(write_only=True, max_length=128, required=False) class Meta: model = Address fields = ["raw_data", "address_line_1", "address_line_2"] - def create(self, validated_data): + def create(self, validated_data: dict[str, Any]) -> Address: raw = validated_data.pop("raw_data") user = None if self.context["request"].user.is_authenticated: user = self.context["request"].user - return Address.objects.create(raw_data=raw, user=user, **validated_data) + return Address.objects.create(raw_data=raw, user=user, **validated_data) # type: ignore [no-untyped-call] -class DoFeedbackSerializer(Serializer): +class DoFeedbackSerializer(Serializer): # type: ignore [type-arg] comment = CharField(required=True) rating = IntegerField(min_value=1, max_value=10, default=10) action = CharField(default="add") - def validate(self, data): + def validate(self, data: dict[str, Any]) -> dict[str, Any]: if data["action"] == "add" and not all([data["comment"], data["rating"]]): raise ValidationError(_("you must provide a comment, rating, and order product uuid to add feedback.")) + return data -class CacheOperatorSerializer(Serializer): +class CacheOperatorSerializer(Serializer): # type: ignore [type-arg] key = CharField(required=True) - data = JSONField(required=False) # type: ignore + data = JSONField(required=False) # type: ignore [assignment] timeout = IntegerField(required=False) -class ContactUsSerializer(Serializer): +class ContactUsSerializer(Serializer): # type: ignore [type-arg] email = CharField(required=True) name = CharField(required=True) subject = CharField(required=True) @@ -101,14 +104,14 @@ class ContactUsSerializer(Serializer): message = CharField(required=True) -class LanguageSerializer(Serializer): +class LanguageSerializer(Serializer): # type: ignore [type-arg] code = CharField(required=True) name = CharField(required=True) flag = CharField() -class RecursiveField(Field): - def to_representation(self, value): +class RecursiveField(Field): # type: ignore [type-arg] + def to_representation(self, value: Any) -> Any: parent = self.parent if isinstance(parent, ListSerializer): parent = parent.parent @@ -116,54 +119,55 @@ class RecursiveField(Field): serializer_class = parent.__class__ return serializer_class(value, context=self.context).data - def to_internal_value(self, data): + def to_internal_value(self, data: Any) -> Any: return data -class AddOrderProductSerializer(Serializer): +class AddOrderProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) - attributes = JSONField(required=False, default=dict) + attributes = ListField(required=False, child=DictField(), default=list) -class BulkAddOrderProductsSerializer(Serializer): +class BulkAddOrderProductsSerializer(Serializer): # type: ignore [type-arg] products = ListField(child=AddOrderProductSerializer(), required=True) -class RemoveOrderProductSerializer(Serializer): +class RemoveOrderProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) attributes = JSONField(required=False, default=dict) -class BulkRemoveOrderProductsSerializer(Serializer): +class BulkRemoveOrderProductsSerializer(Serializer): # type: ignore [type-arg] products = ListField(child=RemoveOrderProductSerializer(), required=True) -class AddWishlistProductSerializer(Serializer): +class AddWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) -class RemoveWishlistProductSerializer(Serializer): +class RemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) -class BulkAddWishlistProductSerializer(Serializer): +class BulkAddWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64) -class BulkRemoveWishlistProductSerializer(Serializer): +class BulkRemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64) -class BuyOrderSerializer(Serializer): +class BuyOrderSerializer(Serializer): # type: ignore [type-arg] force_balance = BooleanField(required=False, default=False) force_payment = BooleanField(required=False, default=False) promocode_uuid = CharField(required=False) shipping_address_uuid = CharField(required=False) billing_address_uuid = CharField(required=False) + chosen_products = AddOrderProductSerializer(many=True, required=False) -class BuyUnregisteredOrderSerializer(Serializer): - products = ListField(child=AddOrderProductSerializer(), required=True) +class BuyUnregisteredOrderSerializer(Serializer): # type: ignore [type-arg] + products = AddOrderProductSerializer(many=True, required=True) promocode_uuid = UUIDField(required=False) customer_name = CharField(required=True) customer_email = CharField(required=True) @@ -173,9 +177,10 @@ class BuyUnregisteredOrderSerializer(Serializer): payment_method = CharField(required=True) -class BuyAsBusinessOrderSerializer(Serializer): - products = ListField(child=AddOrderProductSerializer(), required=True) - business_inn = CharField(required=True) +class BuyAsBusinessOrderSerializer(Serializer): # type: ignore [type-arg] + products = AddOrderProductSerializer(many=True, required=True) + business_identificator = CharField(required=True) + promocode_uuid = UUIDField(required=False) business_email = CharField(required=True) business_phone_number = CharField(required=True) billing_business_address_uuid = CharField(required=False) diff --git a/engine/core/signals.py b/engine/core/signals.py new file mode 100644 index 00000000..70ea6b72 --- /dev/null +++ b/engine/core/signals.py @@ -0,0 +1,182 @@ +import logging +from contextlib import suppress +from datetime import timedelta +from typing import Any + +from django.db import IntegrityError +from django.db.models.signals import post_save +from django.dispatch import receiver +from django.utils.crypto import get_random_string +from django.utils.http import urlsafe_base64_decode +from django.utils.timezone import now +from sentry_sdk import capture_exception + +from engine.core.crm import any_crm_integrations +from engine.core.crm.exceptions import CRMException +from engine.core.models import Category, DigitalAssetDownload, Order, Product, PromoCode, Wishlist +from engine.core.utils import ( + generate_human_readable_id, + resolve_translations_for_elasticsearch, +) +from engine.core.utils.emailing import send_order_created_email, send_order_finished_email, send_promocode_created_email +from evibes.utils.misc import create_object +from engine.vibes_auth.models import User + +logger = logging.getLogger(__name__) + + +# noinspection PyUnusedLocal +@receiver(post_save, sender=User) +def create_order_on_user_creation_signal(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None: + if created: + try: + Order.objects.create(user=instance, status="PENDING") + except IntegrityError: + human_readable_id = generate_human_readable_id() + while True: + if Order.objects.filter(human_readable_id=human_readable_id).exists(): + human_readable_id = generate_human_readable_id() + continue + Order.objects.create(user=instance, status="PENDING", human_readable_id=human_readable_id) + break + + +# noinspection PyUnusedLocal +@receiver(post_save, sender=User) +def create_wishlist_on_user_creation_signal(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None: + if created: + Wishlist.objects.create(user=instance) + + +# noinspection PyUnusedLocal +@receiver(post_save, sender=User) +def create_promocode_on_user_referring(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None: + try: + if type(instance.attributes) is not dict: + instance.attributes = {} + instance.save() + + if created and instance.attributes.get("referrer", ""): + referrer_uuid = urlsafe_base64_decode(instance.attributes.get("referrer", "")).decode() + referrer = User.objects.get(uuid=referrer_uuid) + code = f"WELCOME-{get_random_string(6)}" + PromoCode.objects.create( + user=referrer, + code=code if len(code) <= 20 else code[:20], + discount_percent=10, + start_time=now(), + end_time=now() + timedelta(days=30), + ) + except Exception as e: + capture_exception(e) + logger.error("Could not create PromoCode: %s", str(e)) + + +# noinspection PyUnusedLocal +@receiver(post_save, sender=Order) +def process_order_changes(instance: Order, created: bool, **kwargs: dict[Any, Any]): + if type(instance.attributes) is not dict: + instance.attributes = {} + + if any_crm_integrations() and instance.status != "PENDING": + with suppress(CRMException): + instance.trigger_crm() + + if not created: + if instance.status != "PENDING" and instance.user: + pending_orders = Order.objects.filter(user=instance.user, status="PENDING") + + if not pending_orders.exists(): + try: + Order.objects.create(user=instance.user, status="PENDING") + except IntegrityError: + human_readable_id = generate_human_readable_id() + while True: + try: + if Order.objects.filter(human_readable_id=human_readable_id).exists(): + human_readable_id = generate_human_readable_id() + continue + Order.objects.create( + user=instance, + status="PENDING", + human_readable_id=human_readable_id, + ) + break + except IntegrityError: + continue + + if instance.status in ["CREATED", "PAYMENT"]: + if not instance.is_whole_digital: + send_order_created_email.delay(str(instance.uuid)) + + for order_product in instance.order_products.filter(status="DELIVERING", product__is_digital=True): + if not order_product.product: + continue + + stocks_qs = order_product.product.stocks.filter(digital_asset__isnull=False).exclude(digital_asset="") + + stock = stocks_qs.first() + + has_file = False + if stock: + f = stock.digital_asset + has_file = bool(getattr(f, "name", "")) and f.storage.exists(f.name) + + if has_file: + order_product.status = "FINISHED" + DigitalAssetDownload.objects.get_or_create(order_product=order_product) + order_product.order.user.payments_balance.amount -= order_product.buy_price # type: ignore [union-attr, operator] + order_product.order.user.payments_balance.save() # type: ignore [union-attr] + order_product.save() + continue + + order_product.save() + + try: + vendor_name = ( + order_product.product.stocks.filter(price=order_product.buy_price).first().vendor.name.lower() # type: ignore [union-attr, attr-defined, misc] + ) + + vendor = create_object(f"core.vendors.{vendor_name}", f"{vendor_name.title()}Vendor") + + vendor.buy_order_product(order_product) # type: ignore [attr-defined] + + except Exception as e: + order_product.add_error(f"Failed to buy {order_product.uuid}. Reason: {e}...") + + else: + instance.finalize() + + if instance.order_products.filter(status="FAILED").count() == instance.order_products.count(): + instance.status = "FAILED" + instance.save() + + if instance.status == "FINISHED" and not instance.attributes.get("system_email_sent", False): + instance.attributes["system_email_sent"] = True + instance.save() + send_order_finished_email.delay(str(instance.uuid)) + + +# noinspection PyUnusedLocal +@receiver(post_save, sender=Product) +def update_product_name_lang(instance: Product, created: bool, **kwargs: dict[Any, Any]) -> None: + if created: + pass + resolve_translations_for_elasticsearch(instance, "name") + resolve_translations_for_elasticsearch(instance, "description") + + +# noinspection PyUnusedLocal +@receiver(post_save, sender=Category) +def update_category_name_lang(instance: Category, created: bool, **kwargs: dict[Any, Any]) -> None: + if created: + pass + resolve_translations_for_elasticsearch(instance, "name") + resolve_translations_for_elasticsearch(instance, "description") + + +# noinspection PyUnusedLocal +@receiver(post_save, sender=PromoCode) +def send_promocode_creation_email(instance: PromoCode, created: bool, **kwargs: dict[Any, Any]) -> None: + if created: + send_promocode_created_email.delay(str(instance.uuid)) diff --git a/engine/core/sitemaps.py b/engine/core/sitemaps.py new file mode 100644 index 00000000..2af42a70 --- /dev/null +++ b/engine/core/sitemaps.py @@ -0,0 +1,134 @@ +from django.conf import settings +from django.contrib.sitemaps import Sitemap +from django.utils.translation import gettext_lazy as _ + +from engine.blog.models import Post +from engine.core.models import Brand, Category, Product + + +class SitemapLanguageMixin: + def _lang(self) -> str: + req = getattr(self, "request", None) + return getattr(req, "LANGUAGE_CODE", settings.LANGUAGE_CODE) + + +class StaticPagesSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg] + protocol = "https" + changefreq = "monthly" + priority = 0.8 + limit = 1000 + + def items(self): + lang = self._lang() + pages = [ + { + "name": _("Home"), + "path": f"/{lang}", + "lastmod": settings.RELEASE_DATE, + }, + { + "name": _("Contact Us"), + "path": f"/{lang}/contact-us", + "lastmod": settings.RELEASE_DATE, + }, + { + "name": _("About Us"), + "path": f"/{lang}/about-us", + "lastmod": settings.RELEASE_DATE, + }, + ] + + for static_post_page in Post.objects.filter(is_static_page=True, is_active=True).only( + "title", "slug", "modified" + ): + pages.append( + { + "name": static_post_page.title, + "path": f"/{lang}/information/{static_post_page.slug}", + "lastmod": static_post_page.modified, + } + ) + + return pages + + def location(self, obj): + return obj["path"] + + def lastmod(self, obj): + return obj.get("lastmod") + + +class ProductSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg] + protocol = "https" + changefreq = "daily" + priority = 0.9 + limit = 25000 + + def items(self): + return ( + Product.objects.filter( + is_active=True, + brand__is_active=True, + category__is_active=True, + stocks__isnull=False, + stocks__vendor__is_active=True, + ) + .only("uuid", "name", "modified", "slug") + .order_by("-modified") + ) + + def lastmod(self, obj): + return obj.modified + + def location(self, obj): + return f"/{self._lang()}/product/{obj.slug if obj.slug else '404-non-existent-product'}" + + +class CategorySitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg] + protocol = "https" + changefreq = "weekly" + priority = 0.7 + limit = 10000 + + def items(self): + return ( + Category.objects.filter(is_active=True) + .only( + "uuid", + "name", + "modified", + "slug", + ) + .order_by("-modified") + ) + + def lastmod(self, obj): + return obj.modified + + def location(self, obj): + return f"/{self._lang()}/catalog/{obj.slug if obj.slug else '404-non-existent-category'}" + + +class BrandSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg] + protocol = "https" + changefreq = "weekly" + priority = 0.6 + limit = 10000 + + def items(self): + return ( + Brand.objects.filter(is_active=True) + .only( + "uuid", + "name", + "modified", + "slug", + ) + .order_by("-modified") + ) + + def lastmod(self, obj): + return obj.modified + + def location(self, obj): + return f"/{self._lang()}/brand/{obj.slug if obj.slug else '404-non-existent-brand'}" diff --git a/core/static/Source Code Pro ExtraLight_Regular.json b/engine/core/static/Source Code Pro ExtraLight_Regular.json similarity index 100% rename from core/static/Source Code Pro ExtraLight_Regular.json rename to engine/core/static/Source Code Pro ExtraLight_Regular.json diff --git a/core/static/css/constance.css b/engine/core/static/css/constance.css similarity index 100% rename from core/static/css/constance.css rename to engine/core/static/css/constance.css diff --git a/engine/core/static/favicon.ico b/engine/core/static/favicon.ico new file mode 100644 index 00000000..f3ba783b Binary files /dev/null and b/engine/core/static/favicon.ico differ diff --git a/core/static/favicon.png b/engine/core/static/favicon.png similarity index 100% rename from core/static/favicon.png rename to engine/core/static/favicon.png diff --git a/core/static/flags/ar-ar.png b/engine/core/static/flags/ar-ar.png similarity index 100% rename from core/static/flags/ar-ar.png rename to engine/core/static/flags/ar-ar.png diff --git a/core/static/flags/cs-cz.png b/engine/core/static/flags/cs-cz.png similarity index 100% rename from core/static/flags/cs-cz.png rename to engine/core/static/flags/cs-cz.png diff --git a/core/static/flags/da-dk.png b/engine/core/static/flags/da-dk.png similarity index 100% rename from core/static/flags/da-dk.png rename to engine/core/static/flags/da-dk.png diff --git a/core/static/flags/de-de.png b/engine/core/static/flags/de-de.png similarity index 100% rename from core/static/flags/de-de.png rename to engine/core/static/flags/de-de.png diff --git a/core/static/flags/en-gb.png b/engine/core/static/flags/en-gb.png similarity index 100% rename from core/static/flags/en-gb.png rename to engine/core/static/flags/en-gb.png diff --git a/core/static/flags/en-us.png b/engine/core/static/flags/en-us.png similarity index 100% rename from core/static/flags/en-us.png rename to engine/core/static/flags/en-us.png diff --git a/core/static/flags/es-es.png b/engine/core/static/flags/es-es.png similarity index 100% rename from core/static/flags/es-es.png rename to engine/core/static/flags/es-es.png diff --git a/engine/core/static/flags/fa-ir.png b/engine/core/static/flags/fa-ir.png new file mode 100644 index 00000000..edce631c Binary files /dev/null and b/engine/core/static/flags/fa-ir.png differ diff --git a/core/static/flags/fr-fr.png b/engine/core/static/flags/fr-fr.png similarity index 100% rename from core/static/flags/fr-fr.png rename to engine/core/static/flags/fr-fr.png diff --git a/engine/core/static/flags/he-il.png b/engine/core/static/flags/he-il.png new file mode 100644 index 00000000..242d6598 Binary files /dev/null and b/engine/core/static/flags/he-il.png differ diff --git a/core/static/flags/hi-in.png b/engine/core/static/flags/hi-in.png similarity index 100% rename from core/static/flags/hi-in.png rename to engine/core/static/flags/hi-in.png diff --git a/engine/core/static/flags/hr-hr.png b/engine/core/static/flags/hr-hr.png new file mode 100644 index 00000000..25954e04 Binary files /dev/null and b/engine/core/static/flags/hr-hr.png differ diff --git a/engine/core/static/flags/id-id.png b/engine/core/static/flags/id-id.png new file mode 100644 index 00000000..df7fd90f Binary files /dev/null and b/engine/core/static/flags/id-id.png differ diff --git a/core/static/flags/it-it.png b/engine/core/static/flags/it-it.png similarity index 100% rename from core/static/flags/it-it.png rename to engine/core/static/flags/it-it.png diff --git a/core/static/flags/ja-jp.png b/engine/core/static/flags/ja-jp.png similarity index 100% rename from core/static/flags/ja-jp.png rename to engine/core/static/flags/ja-jp.png diff --git a/core/static/flags/kk-kz.png b/engine/core/static/flags/kk-kz.png similarity index 100% rename from core/static/flags/kk-kz.png rename to engine/core/static/flags/kk-kz.png diff --git a/engine/core/static/flags/ko-kr.png b/engine/core/static/flags/ko-kr.png new file mode 100644 index 00000000..04549708 Binary files /dev/null and b/engine/core/static/flags/ko-kr.png differ diff --git a/core/static/flags/nl-nl.png b/engine/core/static/flags/nl-nl.png similarity index 100% rename from core/static/flags/nl-nl.png rename to engine/core/static/flags/nl-nl.png diff --git a/engine/core/static/flags/no-no.png b/engine/core/static/flags/no-no.png new file mode 100644 index 00000000..b7a3bbff Binary files /dev/null and b/engine/core/static/flags/no-no.png differ diff --git a/core/static/flags/pl-pl.png b/engine/core/static/flags/pl-pl.png similarity index 100% rename from core/static/flags/pl-pl.png rename to engine/core/static/flags/pl-pl.png diff --git a/core/static/flags/pt-br.png b/engine/core/static/flags/pt-br.png similarity index 100% rename from core/static/flags/pt-br.png rename to engine/core/static/flags/pt-br.png diff --git a/core/static/flags/ro-ro.png b/engine/core/static/flags/ro-ro.png similarity index 100% rename from core/static/flags/ro-ro.png rename to engine/core/static/flags/ro-ro.png diff --git a/core/static/flags/ru-ru.png b/engine/core/static/flags/ru-ru.png similarity index 100% rename from core/static/flags/ru-ru.png rename to engine/core/static/flags/ru-ru.png diff --git a/engine/core/static/flags/sv-se.png b/engine/core/static/flags/sv-se.png new file mode 100644 index 00000000..193d58dc Binary files /dev/null and b/engine/core/static/flags/sv-se.png differ diff --git a/engine/core/static/flags/th-th.png b/engine/core/static/flags/th-th.png new file mode 100644 index 00000000..b43f2b4f Binary files /dev/null and b/engine/core/static/flags/th-th.png differ diff --git a/engine/core/static/flags/tr-tr.png b/engine/core/static/flags/tr-tr.png new file mode 100644 index 00000000..cfa010aa Binary files /dev/null and b/engine/core/static/flags/tr-tr.png differ diff --git a/engine/core/static/flags/vi-vn.png b/engine/core/static/flags/vi-vn.png new file mode 100644 index 00000000..67ecdd11 Binary files /dev/null and b/engine/core/static/flags/vi-vn.png differ diff --git a/core/static/flags/zh-hans.png b/engine/core/static/flags/zh-hans.png similarity index 100% rename from core/static/flags/zh-hans.png rename to engine/core/static/flags/zh-hans.png 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/core/static/logo.png b/engine/core/static/logo.png similarity index 100% rename from core/static/logo.png rename to engine/core/static/logo.png diff --git a/core/static/maintenance.html b/engine/core/static/maintenance.html similarity index 100% rename from core/static/maintenance.html rename to engine/core/static/maintenance.html 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/core/static/robots_backend.txt b/engine/core/static/robots_backend.txt similarity index 100% rename from core/static/robots_backend.txt rename to engine/core/static/robots_backend.txt diff --git a/engine/core/static/robots_frontend.txt b/engine/core/static/robots_frontend.txt new file mode 100644 index 00000000..ddd16e59 --- /dev/null +++ b/engine/core/static/robots_frontend.txt @@ -0,0 +1,11 @@ +User-agent: * +Disallow: /*/public/wishlist/ +Disallow: /*/public/cart/ +Disallow: /*/public/checkout/ +Disallow: /*/auth/sign-in/ +Disallow: /*/auth/sign-up/ + +Allow: / + +Sitemap: https://evibes.com/sitemap.xml +Host: evibes.com \ No newline at end of file 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/core/tasks.py b/engine/core/tasks.py similarity index 78% rename from core/tasks.py rename to engine/core/tasks.py index 3bbe5f33..6cc69cd1 100644 --- a/core/tasks.py +++ b/engine/core/tasks.py @@ -1,26 +1,41 @@ +import logging import os import random import shutil import uuid from datetime import date, timedelta from time import sleep +from typing import Any import requests from celery.app import shared_task -from celery.utils.log import get_task_logger from constance import config +from django.conf import settings from django.core.cache import cache +from django.core.management import call_command -from core.models import Product, Promotion -from core.utils.caching import set_default_cache -from core.vendors import delete_stale -from evibes.settings import MEDIA_ROOT +from engine.core.models import Product, Promotion +from engine.core.utils.caching import set_default_cache +from engine.core.utils.vendors import get_vendors_integrations +from engine.core.vendors import AbstractVendor, VendorInactiveError, delete_stale -logger = get_task_logger(__name__) +logger = logging.getLogger(__name__) -@shared_task -def update_products_task(): +@shared_task(queue="default") +def backup_task() -> tuple[bool, str]: + backups: list[str] = [] + if config.BACKUP_DATABASE: + call_command("dbbackup", clean=True) + backups.append("database") + if config.BACKUP_MEDIA: + call_command("mediabackup", clean=True) + backups.append("media") + return True, f"Successfully backed up {', '.join(backups)}" + + +@shared_task(queue="stock_updater") +def update_products_task() -> tuple[bool, str]: """ Run a background task to update product data and manage stale products. @@ -38,14 +53,16 @@ def update_products_task(): if not update_products_task_running: cache.set("update_products_task_running", True, 86400) - vendors_classes = [] + vendors: list[AbstractVendor] = get_vendors_integrations() - for vendor_class in vendors_classes: - vendor = vendor_class() + for vendor in vendors: try: + # noinspection PyArgumentList vendor.update_stock() + except VendorInactiveError: + logger.info("Skipping %s due to inactivity", str(vendor)) except Exception as e: - logger.warning(f"Skipping {vendor_class} due to error: {e!s}") + logger.warning("Skipping %s due to error: %s", str(vendor), str(e)) delete_stale() @@ -54,8 +71,8 @@ def update_products_task(): return True, "Success" -@shared_task -def update_orderproducts_task(): +@shared_task(queue="default") +def update_orderproducts_task() -> tuple[bool, str]: """ Updates the statuses of order products for all vendors listed in the `vendors_classes`. Each vendor class in the `vendors_classes` list is @@ -67,17 +84,17 @@ def update_orderproducts_task(): message confirming the successful execution of the task. :rtype: Tuple[bool, str] """ - vendors_classes = [] + vendors: list[AbstractVendor] = get_vendors_integrations() - for vendor_class in vendors_classes: - vendor = vendor_class() + for vendor in vendors: + # noinspection PyArgumentList vendor.update_order_products_statuses() return True, "Success" -@shared_task -def set_default_caches_task(): +@shared_task(queue="default") +def set_default_caches_task() -> tuple[bool, str]: """ Task to set default caches in the application's memory. @@ -92,8 +109,8 @@ def set_default_caches_task(): return True, "Success" -@shared_task -def remove_stale_product_images(): +@shared_task(queue="default") +def remove_stale_product_images() -> tuple[bool, str]: """ Removes stale product images from the products directory by identifying directories whose names do not match any UUIDs currently present in the database. @@ -109,10 +126,10 @@ def remove_stale_product_images(): :return: None """ - products_dir = os.path.join(MEDIA_ROOT, "products") + products_dir = os.path.join(settings.MEDIA_ROOT, "products") if not os.path.isdir(products_dir): logger.info("The products directory does not exist: %s", products_dir) - return + return True, "The products directory does not exist." # Load all current product UUIDs into a set. # This query returns all product UUIDs (as strings or UUID objects). @@ -137,9 +154,10 @@ def remove_stale_product_images(): logger.info("Removed stale product images directory: %s", entry_path) except Exception as e: logger.error("Error removing directory %s: %s", entry_path, e) + return True, "Successfully removed stale product images." -@shared_task +@shared_task(queue="default") def process_promotions() -> tuple[bool, str]: """ Processes and updates promotions based on holiday data or default settings. @@ -174,7 +192,7 @@ def process_promotions() -> tuple[bool, str]: ) response.raise_for_status() except Exception as e: - logger.warning(f"Couldn't fetch holiday data for {checked_date}: {e!s}") + logger.warning("Couldn't fetch holiday data for %s: %s", checked_date, str(e)) return False, f"Couldn't fetch holiday data for {checked_date}: {e!s}" holidays = response.json() if holidays: @@ -199,7 +217,7 @@ def process_promotions() -> tuple[bool, str]: if eligible_products.count() < 48: return False, "Not enough products to choose from [< 48]." - selected_products: list = [] + selected_products: list[Any] = [] while len(selected_products) < 48: product = eligible_products.order_by("?").first() diff --git a/payments/docs/__init__.py b/engine/core/templates/__init__.py similarity index 100% rename from payments/docs/__init__.py rename to engine/core/templates/__init__.py diff --git a/engine/core/templates/admin/dashboard/_customers_mix.html b/engine/core/templates/admin/dashboard/_customers_mix.html new file mode 100644 index 00000000..74a5af15 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_customers_mix.html @@ -0,0 +1,28 @@ +{% load i18n unfold %} + +{% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Customers mix (30d)" %} + {% endcomponent %} + {% if customers_mix.total|default:0 > 0 %} +
+
+ {% trans "New customers" %} + {{ customers_mix.new }} ({{ customers_mix.new_pct }}%) +
+ {% component "unfold/components/progress.html" with value=customers_mix.new_pct title='' description='' %} + {% endcomponent %} + +
+ {% trans "Returning customers" %} + {{ customers_mix.returning }} ({{ customers_mix.returning_pct }}%) +
+ {% component "unfold/components/progress.html" with value=customers_mix.returning_pct title='' description='' %} + {% endcomponent %} +
+ {% else %} + {% component "unfold/components/text.html" %} + {% trans "No customer activity in the last 30 days." %} + {% endcomponent %} + {% endif %} +{% endcomponent %} diff --git a/engine/core/templates/admin/dashboard/_daily_sales.html b/engine/core/templates/admin/dashboard/_daily_sales.html new file mode 100644 index 00000000..8e436ef9 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_daily_sales.html @@ -0,0 +1,129 @@ +{% load i18n unfold static %} + +{% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {{ daily_title|default:_('Daily sales') }} + {% endcomponent %} +
+ +
+ + {{ daily_labels|json_script:"daily-labels" }} + {{ daily_orders|json_script:"daily-orders" }} + {{ daily_gross|json_script:"daily-gross" }} + +{% endcomponent %} diff --git a/engine/core/templates/admin/dashboard/_header.html b/engine/core/templates/admin/dashboard/_header.html new file mode 100644 index 00000000..e456cdb5 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_header.html @@ -0,0 +1,14 @@ +{% load i18n unfold %} +
+ {% trans "Dashboard" %} + {% with cur=tf|default:30 %} + 7d + 30d + 90d + 360d + {% endwith %} +
diff --git a/engine/core/templates/admin/dashboard/_income_overview.html b/engine/core/templates/admin/dashboard/_income_overview.html new file mode 100644 index 00000000..c42c8c29 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_income_overview.html @@ -0,0 +1,118 @@ +{% load i18n unfold arith %} + +{% 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 "Income overview" %} + {% endcomponent %} + + {% with net=revenue_net_30|default:0 %} + {% with tax_amt=gross|sub:net %} + {% with returns_capped=returns %} + {% if returns > gross %} + {% with returns_capped=gross %}{% endwith %} + {% endif %} + {% with tax_amt_pos=tax_amt %} + {% if tax_amt_pos < 0 %} + {% with tax_amt_pos=0 %}{% endwith %} + {% endif %} + {% with net_for_pie=gross|sub:tax_amt_pos|sub:returns_capped %} + {% if net_for_pie < 0 %} + {% with net_for_pie=0 %}{% endwith %} + {% endif %} +
+
+ +
+
+
+ + {% trans "Net" %}: + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ net }} +
+ {% if tax_amt_pos > 0 %} +
+ + {% trans "Taxes" %}: + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ tax_amt_pos|floatformat:2 }} +
+ {% endif %} +
+ + {% trans "Returns" %}: + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ returns }} +
+
+ + {% trans "Gross (pie total)" %}: + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ gross }} +
+
+
+ + + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endcomponent %} + {% endwith %} +{% endwith %} diff --git a/engine/core/templates/admin/dashboard/_kpis.html b/engine/core/templates/admin/dashboard/_kpis.html new file mode 100644 index 00000000..d3dcb255 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_kpis.html @@ -0,0 +1,76 @@ +{% load i18n unfold %} + +
+ {% component "unfold/components/card.html" %} +
+ {% component "unfold/components/text.html" %}{% trans "GMV" %} ({{ tf|default:30 }}d){% endcomponent %} + {% with d=kpi.gmv.delta_pct|default:0 %} + + {% if d >= 0 %}+{% endif %}{{ d }}% + + {% endwith %} +
+ {% component "unfold/components/title.html" %} + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ kpi.gmv.value|default:0 }} + {% endcomponent %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} +
+ {% component "unfold/components/text.html" %}{% trans "Orders" %} ({{ tf|default:30 }}d){% endcomponent %} + {% with d=kpi.orders.delta_pct|default:0 %} + + {% if d >= 0 %}+{% endif %}{{ d }}% + + {% endwith %} +
+ {% component "unfold/components/title.html" %} + {{ kpi.orders.value|default:0 }} + {% endcomponent %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} +
+ {% component "unfold/components/text.html" %}{% trans "AOV" %} ({{ tf|default:30 }}d){% endcomponent %} + {% with d=kpi.aov.delta_pct|default:0 %} + + {% if d >= 0 %}+{% endif %}{{ d }}% + + {% endwith %} +
+ {% component "unfold/components/title.html" %} + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ kpi.aov.value|default:0 }} + {% endcomponent %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} +
+ {% component "unfold/components/text.html" %}{% trans "Net revenue" %} ({{ tf|default:30 }}d){% endcomponent %} + {% with d=kpi.net.delta_pct|default:0 %} + + {% if d >= 0 %}+{% endif %}{{ d }}% + + {% endwith %} +
+ {% component "unfold/components/title.html" %} + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ kpi.net.value|default:0 }} + {% endcomponent %} + {% endcomponent %} + + {% component "unfold/components/card.html" %} +
+ {% component "unfold/components/text.html" %}{% trans "Refund rate" %} ({{ tf|default:30 }}d){% endcomponent %} + {% with d=kpi.refund_rate.delta_pct|default:0 %} + + {% if d >= 0 %}+{% endif %}{{ d }}% + + {% endwith %} +
+ {% component "unfold/components/title.html" %} + {{ kpi.refund_rate.value|default:0 }}% + {% endcomponent %} + {% component "unfold/components/text.html" with class="text-xs text-gray-500 dark:text-gray-400" %} + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ returns_amount|default:0 }} {% trans "returned" %} + {% endcomponent %} + {% endcomponent %} +
diff --git a/engine/core/templates/admin/dashboard/_low_stock.html b/engine/core/templates/admin/dashboard/_low_stock.html new file mode 100644 index 00000000..c8677f4e --- /dev/null +++ b/engine/core/templates/admin/dashboard/_low_stock.html @@ -0,0 +1,32 @@ +{% load i18n unfold %} + +{% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Low stock" %} + {% endcomponent %} + + {% if low_stock_products %} +
+ {% for p in low_stock_products %} + +
+
{{ p.name }}
+
SKU: {{ p.sku }}
+
+
+ + {{ p.qty }} + +
+
+ {% endfor %} +
+ {% else %} + {% component "unfold/components/text.html" with class="text-sm text-gray-500 dark:text-gray-400" %} + {% trans "No low stock items." %} + {% endcomponent %} + {% endif %} +{% endcomponent %} diff --git a/engine/core/templates/admin/dashboard/_most_returned.html b/engine/core/templates/admin/dashboard/_most_returned.html new file mode 100644 index 00000000..d9514d5d --- /dev/null +++ b/engine/core/templates/admin/dashboard/_most_returned.html @@ -0,0 +1,27 @@ +{% load i18n unfold %} + +{% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Most returned products (30d)" %} + {% endcomponent %} + {% if most_returned_products %} + + {% else %} + {% component "unfold/components/text.html" %} + {% trans "No returns in the last 30 days." %} + {% endcomponent %} + {% endif %} +{% endcomponent %} diff --git a/engine/core/templates/admin/dashboard/_product_lists.html b/engine/core/templates/admin/dashboard/_product_lists.html new file mode 100644 index 00000000..343b5df0 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_product_lists.html @@ -0,0 +1,72 @@ +{% load i18n unfold %} + +
+ {% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Most wished product" %} + {% endcomponent %} + {% if most_wished_products %} + + {% elif most_wished_product %} + + {% if most_wished_product.image %} + {{ most_wished_product.name }} + {% endif %} + {{ 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_products %} + + {% elif most_popular_product %} + + {% if most_popular_product.image %} + {{ most_popular_product.name }} + {% endif %} + {{ most_popular_product.name }} + + {% else %} + {% component "unfold/components/text.html" %} + {% trans "No data yet." %} + {% endcomponent %} + {% endif %} + {% endcomponent %} +
\ No newline at end of file diff --git a/engine/core/templates/admin/dashboard/_quick_links.html b/engine/core/templates/admin/dashboard/_quick_links.html new file mode 100644 index 00000000..8ed55eb4 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_quick_links.html @@ -0,0 +1,15 @@ +{% load i18n unfold %} + +{% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Quick Links" %} + {% endcomponent %} + {% if quick_links %} + {% component "unfold/components/navigation.html" with class="flex flex-col gap-1" items=quick_links %} + {% endcomponent %} + {% else %} + {% component "unfold/components/text.html" %} + {% trans "No links available." %} + {% endcomponent %} + {% endif %} +{% endcomponent %} diff --git a/engine/core/templates/admin/dashboard/_shipped_vs_digital.html b/engine/core/templates/admin/dashboard/_shipped_vs_digital.html new file mode 100644 index 00000000..6998b32c --- /dev/null +++ b/engine/core/templates/admin/dashboard/_shipped_vs_digital.html @@ -0,0 +1,29 @@ +{% load i18n unfold %} + +{% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Shipped vs Digital (30d)" %} + {% endcomponent %} + +
+
+ {% trans "Digital" %} + + {{ shipped_vs_digital.digital_qty }} ({% firstof shipped_vs_digital.digital_pct 0 %}%) · + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ shipped_vs_digital.digital_gross }} + +
+ {% component "unfold/components/progress.html" with value=shipped_vs_digital.digital_pct title='' description='' %} + {% endcomponent %} + +
+ {% trans "Shipped" %} + + {{ shipped_vs_digital.shipped_qty }} ({% firstof shipped_vs_digital.shipped_pct 0 %}%) · + {% if currency_symbol %}{{ currency_symbol }}{% endif %}{{ shipped_vs_digital.shipped_gross }} + +
+ {% component "unfold/components/progress.html" with value=shipped_vs_digital.shipped_pct title='' description='' %} + {% endcomponent %} +
+{% endcomponent %} diff --git a/engine/core/templates/admin/dashboard/_top_categories.html b/engine/core/templates/admin/dashboard/_top_categories.html new file mode 100644 index 00000000..fe51b251 --- /dev/null +++ b/engine/core/templates/admin/dashboard/_top_categories.html @@ -0,0 +1,26 @@ +{% load i18n unfold %} + +{% component "unfold/components/card.html" %} + {% component "unfold/components/title.html" %} + {% trans "Top categories by quantity (30d)" %} + {% endcomponent %} + {% if top_categories %} + + {% else %} + {% component "unfold/components/text.html" %} + {% trans "No category sales in the last 30 days." %} + {% endcomponent %} + {% endif %} +{% endcomponent %} diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html new file mode 100644 index 00000000..7e98c630 --- /dev/null +++ b/engine/core/templates/admin/index.html @@ -0,0 +1,67 @@ +{% extends 'admin/base.html' %} +{% load i18n unfold static arith %} + +{% 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 %} + {% component "unfold/components/container.html" %} +
+ {% component "unfold/components/title.html" %} + {% include "admin/dashboard/_header.html" %} + {% endcomponent %} + +
+ {% include "admin/dashboard/_kpis.html" %} +
+ +
+ {% include "admin/dashboard/_low_stock.html" %} +
+ +
+ {% include "admin/dashboard/_most_returned.html" %} +
+ +
+ {% include "admin/dashboard/_customers_mix.html" %} +
+ + {% if shipped_vs_digital.digital_qty|default:0 > 0 and shipped_vs_digital.shipped_qty|default:0 > 0 %} +
+ {% include "admin/dashboard/_shipped_vs_digital.html" %} +
+ {% endif %} + +
+ {% include "admin/dashboard/_top_categories.html" %} +
+ +
+ {% include "admin/dashboard/_product_lists.html" %} +
+ +
+ {% include "admin/dashboard/_daily_sales.html" %} +
+ + {% 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 %} \ No newline at end of file diff --git a/core/templates/contact_us_email.html b/engine/core/templates/contact_us_email.html similarity index 100% rename from core/templates/contact_us_email.html rename to engine/core/templates/contact_us_email.html diff --git a/core/templates/digital_order_created_email.html b/engine/core/templates/digital_order_created_email.html similarity index 98% rename from core/templates/digital_order_created_email.html rename to engine/core/templates/digital_order_created_email.html index 45bb1f59..06d6e388 100644 --- a/core/templates/digital_order_created_email.html +++ b/engine/core/templates/digital_order_created_email.html @@ -91,7 +91,7 @@ diff --git a/core/templates/digital_order_delivered_email.html b/engine/core/templates/digital_order_delivered_email.html similarity index 98% rename from core/templates/digital_order_delivered_email.html rename to engine/core/templates/digital_order_delivered_email.html index 7b2df364..fbf27cbc 100644 --- a/core/templates/digital_order_delivered_email.html +++ b/engine/core/templates/digital_order_delivered_email.html @@ -1,5 +1,4 @@ {% load tz static i18n filters conditions %} - @@ -91,7 +90,7 @@ diff --git a/core/templates/json_table_widget.html b/engine/core/templates/json_table_widget.html similarity index 98% rename from core/templates/json_table_widget.html rename to engine/core/templates/json_table_widget.html index 5871a651..0c72cdc9 100644 --- a/core/templates/json_table_widget.html +++ b/engine/core/templates/json_table_widget.html @@ -37,7 +37,7 @@