Merge branch 'mealie-next' into tts-ux

This commit is contained in:
Daniel O'Connor 2025-03-22 12:05:28 +10:30 committed by GitHub
commit ee0f678ffd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
190 changed files with 12101 additions and 10874 deletions

View file

@ -48,7 +48,7 @@
], ],
// Use 'onCreateCommand' to run commands at the end of container creation. // Use 'onCreateCommand' to run commands at the end of container creation.
// Use 'postCreateCommand' to run commands after the container is created. // Use 'postCreateCommand' to run commands after the container is created.
"onCreateCommand": "sudo chown -R vscode:vscode /workspaces/mealie/frontend/node_modules && task setup", "onCreateCommand": "sudo chown -R vscode:vscode /workspaces/mealie/frontend/node_modules /home/vscode/commandhistory && task setup",
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode", "remoteUser": "vscode",
"features": { "features": {

View file

@ -6,7 +6,7 @@
.idea .idea
.vscode .vscode
__pycache__/ **/__pycache__/
*.py[cod] *.py[cod]
*$py.class *$py.class
*.so *.so
@ -25,10 +25,10 @@ venv
*/node_modules */node_modules
*/dist */dist
/dist/
*/data/db */data/db
*/mealie/test */mealie/test
*/mealie/.temp */mealie/.temp
/mealie/frontend/
model.crfmodel
crowdin.yml crowdin.yml

View file

@ -3,8 +3,15 @@ on:
workflow_call: workflow_call:
jobs: jobs:
build-package:
name: "Build Python package"
uses: ./.github/workflows/partial-package.yml
with:
tag: e2e
test: test:
timeout-minutes: 60 timeout-minutes: 60
needs: build-package
runs-on: ubuntu-latest runs-on: ubuntu-latest
defaults: defaults:
run: run:
@ -18,11 +25,18 @@ jobs:
cache-dependency-path: ./tests/e2e/yarn.lock cache-dependency-path: ./tests/e2e/yarn.lock
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- name: Retrieve Python package
uses: actions/download-artifact@v4
with:
name: backend-dist
path: dist
- name: Build Image - name: Build Image
uses: docker/build-push-action@v5 uses: docker/build-push-action@v5
with: with:
file: ./docker/Dockerfile file: ./docker/Dockerfile
context: . context: .
build-contexts: |
packages=dist
push: false push: false
load: true load: true
tags: mealie:e2e tags: mealie:e2e

View file

@ -21,7 +21,7 @@ jobs:
uses: ./.github/workflows/partial-backend.yml uses: ./.github/workflows/partial-backend.yml
frontend-tests: frontend-tests:
name: "Frontend and End-to-End Tests" name: "Frontend Tests"
uses: ./.github/workflows/partial-frontend.yml uses: ./.github/workflows/partial-frontend.yml
build-release: build-release:

View file

@ -1,4 +1,4 @@
name: Backend Test/Lint name: Backend Lint and Test
on: on:
workflow_call: workflow_call:

View file

@ -16,7 +16,14 @@ on:
required: true required: true
jobs: jobs:
build-package:
name: "Build Python package"
uses: ./.github/workflows/partial-package.yml
with:
tag: ${{ inputs.tag }}
publish: publish:
needs: build-package
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout repository
@ -35,18 +42,22 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Override __init__.py
run: |
echo "__version__ = \"${{ inputs.tag }}\"" > ./mealie/__init__.py
- uses: depot/setup-action@v1 - uses: depot/setup-action@v1
- name: Retrieve Python package
uses: actions/download-artifact@v4
with:
name: backend-dist
path: dist
- name: Build and push Docker image, via Depot.dev - name: Build and push Docker image, via Depot.dev
uses: depot/build-push-action@v1 uses: depot/build-push-action@v1
with: with:
project: srzjb6mhzm project: srzjb6mhzm
file: ./docker/Dockerfile file: ./docker/Dockerfile
context: . context: .
build-contexts: |
packages=dist
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
push: true push: true
tags: | tags: |

View file

@ -1,4 +1,4 @@
name: Frontend Build/Lin name: Frontend Lint and Test
on: on:
workflow_call: workflow_call:
@ -41,37 +41,3 @@ jobs:
- name: Run tests 🧪 - name: Run tests 🧪
run: yarn test:ci run: yarn test:ci
working-directory: "frontend" working-directory: "frontend"
build:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎
uses: actions/checkout@v4
- name: Setup node env 🏗
uses: actions/setup-node@v4.0.0
with:
node-version: 16
check-latest: true
- name: Get yarn cache directory path 🛠
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: Cache node_modules 📦
uses: actions/cache@v4
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies 👨🏻‍💻
run: yarn
working-directory: "frontend"
- name: Run Build 🚚
run: yarn build
working-directory: "frontend"

102
.github/workflows/partial-package.yml vendored Normal file
View file

@ -0,0 +1,102 @@
name: Package build
on:
workflow_call:
inputs:
tag:
required: true
type: string
jobs:
build-frontend:
name: Build frontend
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎
uses: actions/checkout@v4
- name: Setup node env 🏗
uses: actions/setup-node@v4.0.0
with:
node-version: 16
check-latest: true
- name: Get yarn cache directory path 🛠
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: Cache node_modules 📦
uses: actions/cache@v4
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies 👨🏻‍💻
run: yarn
working-directory: "frontend"
- name: Run Build 🚚
run: yarn generate
working-directory: "frontend"
- name: Archive built frontend
uses: actions/upload-artifact@v4
with:
name: frontend-dist
path: frontend/dist
retention-days: 5
build-package:
name: Build Python package
needs: build-frontend
runs-on: ubuntu-latest
steps:
- name: Install Task
uses: arduino/setup-task@v2
with:
version: 3.x
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Check out repository
uses: actions/checkout@v4
- name: Set up python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
plugins: |
poetry-plugin-export
- name: Retrieve built frontend
uses: actions/download-artifact@v4
with:
name: frontend-dist
path: mealie/frontend
- name: Override __init__.py
run: |
echo "__version__ = \"${{ inputs.tag }}\"" > ./mealie/__init__.py
- name: Build package and requirements.txt
env:
SKIP_PACKAGE_DEPS: true
run: |
task py:package
- name: Archive built package
uses: actions/upload-artifact@v4
with:
name: backend-dist
path: dist
retention-days: 5

View file

@ -19,7 +19,7 @@ jobs:
uses: ./.github/workflows/partial-backend.yml uses: ./.github/workflows/partial-backend.yml
frontend-tests: frontend-tests:
name: "Frontend and End-to-End Tests" name: "Frontend Tests"
uses: ./.github/workflows/partial-frontend.yml uses: ./.github/workflows/partial-frontend.yml
container-scanning: container-scanning:

View file

@ -10,7 +10,7 @@ jobs:
uses: ./.github/workflows/partial-backend.yml uses: ./.github/workflows/partial-backend.yml
frontend-tests: frontend-tests:
name: "Frontend and End-to-End Tests" name: "Frontend Tests"
uses: ./.github/workflows/partial-frontend.yml uses: ./.github/workflows/partial-frontend.yml
build-release: build-release:

7
.gitignore vendored
View file

@ -52,7 +52,7 @@ pnpm-debug.log*
env/ env/
build/ build/
develop-eggs/ develop-eggs/
/dist/
downloads/ downloads/
eggs/ eggs/
.eggs/ .eggs/
@ -66,6 +66,9 @@ wheels/
.installed.cfg .installed.cfg
*.egg *.egg
# frontend copied into Python module for packaging purposes
/mealie/frontend/
# PyInstaller # PyInstaller
# Usually these files are written by a python script from a template # Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it. # before PyInstaller builds the exe, so as to inject date/other infos into it.
@ -154,10 +157,8 @@ dev/data/backups/dev_sample_data*.zip
dev/data/recipes/* dev/data/recipes/*
dev/scripts/output/app_routes.py dev/scripts/output/app_routes.py
dev/scripts/output/javascriptAPI/* dev/scripts/output/javascriptAPI/*
mealie/services/scraper/ingredient_nlp/model.crfmodel
dev/code-generation/generated/openapi.json dev/code-generation/generated/openapi.json
dev/code-generation/generated/test_routes.py dev/code-generation/generated/test_routes.py
mealie/services/parser_services/crfpp/model.crfmodel
lcov.info lcov.info
dev/code-generation/openapi.json dev/code-generation/openapi.json

View file

@ -12,7 +12,7 @@ repos:
exclude: ^tests/data/ exclude: ^tests/data/
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version. # Ruff version.
rev: v0.9.3 rev: v0.11.0
hooks: hooks:
- id: ruff - id: ruff
- id: ruff-format - id: ruff-format

View file

@ -60,5 +60,9 @@
}, },
"[vue]": { "[vue]": {
"editor.formatOnSave": false "editor.formatOnSave": false
},
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff"
} }
} }

View file

@ -41,35 +41,31 @@ tasks:
setup:ui: setup:ui:
desc: setup frontend dependencies desc: setup frontend dependencies
dir: frontend dir: frontend
run: once
cmds: cmds:
- yarn install - yarn install
sources:
- package.json
- yarn.lock
generates:
- node_modules/**
setup:py: setup:py:
desc: setup python dependencies desc: setup python dependencies
run: once
cmds: cmds:
- poetry install --with main,dev,postgres - poetry install --with main,dev,postgres
- poetry run pre-commit install - poetry run pre-commit install
setup:model:
desc: setup nlp model
vars:
MODEL_URL: https://github.com/mealie-recipes/nlp-model/releases/download/v1.0.0/model.crfmodel
OUTPUT: ./mealie/services/parser_services/crfpp/model.crfmodel
sources: sources:
# using pyproject.toml as the dependency since this should only ever need to run once - poetry.lock
# during setup. There is perhaps a better way to do this. - pyproject.toml
- ./pyproject.toml - .pre-commit-config.yaml
generates:
- ./mealie/services/parser_services/crfpp/model.crfmodel
cmds:
- curl -L0 {{ .MODEL_URL }} --output {{ .OUTPUT }}
setup: setup:
desc: setup all dependencies desc: setup all dependencies
deps: deps:
- setup:ui - setup:ui
- setup:py - setup:py
- setup:model
dev:generate: dev:generate:
desc: run code generators desc: run code generators
@ -131,6 +127,63 @@ tasks:
- poetry run coverage html - poetry run coverage html
- open htmlcov/index.html - open htmlcov/index.html
py:package:copy-frontend:
desc: copy the frontend files into the Python package
internal: true
deps:
- ui:generate
cmds:
- rm -rf mealie/frontend
- cp -a frontend/dist mealie/frontend
sources:
- frontend/dist/**
generates:
- mealie/frontend/**
py:package:generate-requirements:
desc: Generate requirements file to pin all packages, effectively a "pip freeze" before installation begins
internal: true
cmds:
- poetry export -n --only=main --extras=pgsql --output=dist/requirements.txt
# Include mealie in the requirements, hashing the package that was just built to ensure it's the one installed
- echo "mealie[pgsql]=={{.MEALIE_VERSION}} \\" >> dist/requirements.txt
- poetry run pip hash dist/mealie-{{.MEALIE_VERSION}}-py3-none-any.whl | tail -n1 | tr -d '\n' >> dist/requirements.txt
- echo " \\" >> dist/requirements.txt
- poetry run pip hash dist/mealie-{{.MEALIE_VERSION}}.tar.gz | tail -n1 >> dist/requirements.txt
vars:
MEALIE_VERSION:
sh: poetry version --short
sources:
- poetry.lock
- pyproject.toml
- dist/mealie-*.whl
- dist/mealie-*.tar.gz
generates:
- dist/requirements.txt
py:package:deps-parallel:
desc: Run py:package dependencies in parallel
internal: true
deps:
- setup:py
- py:package:copy-frontend
py:package:deps:
desc: Dependencies of py:package, skippable by setting SKIP_PACKAGE_DEPS=true
internal: true
cmds:
- task: py:package:deps-parallel
status:
- '{{ .SKIP_PACKAGE_DEPS | default "false"}}'
py:package:
desc: builds Python packages (sdist and wheel) in top-level dist directory
deps:
- py:package:deps
cmds:
- poetry build -n --output=dist
- task: py:package:generate-requirements
py: py:
desc: runs the backend server desc: runs the backend server
cmds: cmds:
@ -160,6 +213,14 @@ tasks:
cmds: cmds:
- yarn build - yarn build
ui:generate:
desc: generates a static version of the frontend in frontend/dist
dir: frontend
deps:
- setup:ui
cmds:
- yarn generate
ui:lint: ui:lint:
desc: runs the frontend linter desc: runs the frontend linter
dir: frontend dir: frontend
@ -184,6 +245,16 @@ tasks:
cmds: cmds:
- yarn run dev - yarn run dev
docker:build-from-package:
desc: Builds the Docker image from the existing Python package in dist/
deps:
- py:package
cmds:
- docker build --tag mealie:dev --file docker/Dockerfile --build-arg COMMIT={{.GIT_COMMIT}} --build-context packages=dist .
vars:
GIT_COMMIT:
sh: git rev-parse HEAD
docker:prod: docker:prod:
desc: builds and runs the production docker image locally desc: builds and runs the production docker image locally
dir: docker dir: docker

View file

@ -1,8 +1,11 @@
FROM node:16 as builder ###############################################
# Frontend Build
###############################################
FROM node:16 AS frontend-builder
WORKDIR /app WORKDIR /frontend
COPY ./frontend . COPY frontend .
RUN yarn install \ RUN yarn install \
--prefer-offline \ --prefer-offline \
@ -26,14 +29,10 @@ ENV PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=off \ PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \ PIP_DEFAULT_TIMEOUT=100 \
POETRY_HOME="/opt/poetry" \ VENV_PATH="/opt/mealie"
POETRY_VIRTUALENVS_IN_PROJECT=true \
POETRY_NO_INTERACTION=1 \
PYSETUP_PATH="/opt/pysetup" \
VENV_PATH="/opt/pysetup/.venv"
# prepend poetry and venv to path # prepend venv to path
ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" ENV PATH="$VENV_PATH/bin:$PATH"
# create user account # create user account
RUN useradd -u 911 -U -d $MEALIE_HOME -s /bin/bash abc \ RUN useradd -u 911 -U -d $MEALIE_HOME -s /bin/bash abc \
@ -41,38 +40,81 @@ RUN useradd -u 911 -U -d $MEALIE_HOME -s /bin/bash abc \
&& mkdir $MEALIE_HOME && mkdir $MEALIE_HOME
############################################### ###############################################
# Builder Image # Backend Package Build
############################################### ###############################################
FROM python-base as builder-base FROM python-base AS backend-builder
RUN apt-get update \ RUN apt-get update \
&& apt-get install --no-install-recommends -y \ && apt-get install --no-install-recommends -y \
curl \ curl \
&& rm -rf /var/lib/apt/lists/*
ENV POETRY_HOME="/opt/poetry" \
POETRY_NO_INTERACTION=1
# prepend poetry to path
ENV PATH="$POETRY_HOME/bin:$PATH"
# install poetry - respects $POETRY_VERSION & $POETRY_HOME
ENV POETRY_VERSION=2.0.1
RUN curl -sSL https://install.python-poetry.org | python3 -
# install poetry plugins needed to build the package
RUN poetry self add "poetry-plugin-export>=1.9"
WORKDIR /mealie
# copy project files here to ensure they will be cached.
COPY poetry.lock pyproject.toml ./
COPY mealie ./mealie
# Copy frontend to package it into the wheel
COPY --from=frontend-builder /frontend/dist ./mealie/frontend
# Build the source and binary package
RUN poetry build --output=dist
# Create the requirements file, which is used to install the built package and
# its pinned dependencies later. mealie is included to ensure the built one is
# what's installed.
RUN export MEALIE_VERSION=$(poetry version --short) \
&& poetry export --only=main --extras=pgsql --output=dist/requirements.txt \
&& echo "mealie[pgsql]==$MEALIE_VERSION \\" >> dist/requirements.txt \
&& poetry run pip hash dist/mealie-$MEALIE_VERSION-py3-none-any.whl | tail -n1 | tr -d '\n' >> dist/requirements.txt \
&& echo " \\" >> dist/requirements.txt \
&& poetry run pip hash dist/mealie-$MEALIE_VERSION.tar.gz | tail -n1 >> dist/requirements.txt
###############################################
# Package Container
# Only role is to hold the packages, or be overriden by a --build-context flag.
###############################################
FROM scratch AS packages
COPY --from=backend-builder /mealie/dist /
###############################################
# Python Virtual Environment Build
###############################################
# Install packages required to build the venv, in parallel to building the wheel
FROM python-base AS venv-builder-base
RUN apt-get update \
&& apt-get install --no-install-recommends -y \
build-essential \ build-essential \
libpq-dev \ libpq-dev \
libwebp-dev \ libwebp-dev \
# LDAP Dependencies # LDAP Dependencies
libsasl2-dev libldap2-dev libssl-dev \ libsasl2-dev libldap2-dev libssl-dev \
gnupg gnupg2 gnupg1 \ gnupg gnupg2 gnupg1 \
&& rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/apt/lists/*
&& pip install -U --no-cache-dir pip RUN python3 -m venv --upgrade-deps $VENV_PATH
# install poetry - respects $POETRY_VERSION & $POETRY_HOME # Install the wheel and all dependencies into the venv
ENV POETRY_VERSION=1.3.1 FROM venv-builder-base AS venv-builder
RUN curl -sSL https://install.python-poetry.org | python3 -
# copy project requirement files here to ensure they will be cached. # Copy built package (wheel) and its dependency requirements
WORKDIR $PYSETUP_PATH COPY --from=packages * /dist/
COPY ./poetry.lock ./pyproject.toml ./
# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally # Install the wheel with exact versions of dependencies into the venv
RUN poetry install -E pgsql --only main RUN . $VENV_PATH/bin/activate \
&& pip install --require-hashes -r /dist/requirements.txt --find-links /dist
###############################################
# CRFPP Image
###############################################
FROM hkotel/crfpp as crfpp
RUN echo "crfpp-container"
############################################### ###############################################
# Production Image # Production Image
@ -96,39 +138,15 @@ RUN apt-get update \
# create directory used for Docker Secrets # create directory used for Docker Secrets
RUN mkdir -p /run/secrets RUN mkdir -p /run/secrets
# copying poetry and venv into image # Copy venv into image. It contains a fully-installed mealie backend and frontend.
COPY --from=builder-base $POETRY_HOME $POETRY_HOME COPY --from=venv-builder $VENV_PATH $VENV_PATH
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH
ENV LD_LIBRARY_PATH=/usr/local/lib
COPY --from=crfpp /usr/local/lib/ /usr/local/lib
COPY --from=crfpp /usr/local/bin/crf_learn /usr/local/bin/crf_learn
COPY --from=crfpp /usr/local/bin/crf_test /usr/local/bin/crf_test
# copy backend
COPY ./mealie $MEALIE_HOME/mealie
COPY ./poetry.lock ./pyproject.toml $MEALIE_HOME/
# venv already has runtime deps installed we get a quicker install
WORKDIR $MEALIE_HOME
RUN . $VENV_PATH/bin/activate && poetry install -E pgsql --only main
WORKDIR /
# Grab CRF++ Model Release
RUN python $MEALIE_HOME/mealie/scripts/install_model.py
VOLUME [ "$MEALIE_HOME/data/" ] VOLUME [ "$MEALIE_HOME/data/" ]
ENV APP_PORT=9000 ENV APP_PORT=9000
EXPOSE ${APP_PORT} EXPOSE ${APP_PORT}
HEALTHCHECK CMD python $MEALIE_HOME/mealie/scripts/healthcheck.py || exit 1 HEALTHCHECK CMD python -m mealie.scripts.healthcheck || exit 1
# ----------------------------------
# Copy Frontend
ENV STATIC_FILES=/spa/static
COPY --from=builder /app/dist ${STATIC_FILES}
ENV HOST 0.0.0.0 ENV HOST 0.0.0.0

View file

@ -32,13 +32,51 @@ init() {
cd /app cd /app
# Activate our virtual environment here # Activate our virtual environment here
. /opt/pysetup/.venv/bin/activate . /opt/mealie/bin/activate
}
load_secrets() {
# Each of these environment variables will support a `_FILE` suffix that allows
# for setting the environment variable through the Docker Compose secret
# pattern.
local -a secret_supported_vars=(
"POSTGRES_USER"
"POSTGRES_PASSWORD"
"POSTGRES_SERVER"
"POSTGRES_PORT"
"POSTGRES_DB"
"POSTGRES_URL_OVERRIDE"
"SMTP_HOST"
"SMTP_PORT"
"SMTP_USER"
"SMTP_PASSWORD"
"LDAP_SERVER_URL"
"LDAP_QUERY_PASSWORD"
"OIDC_CONFIGURATION_URL"
"OIDC_CLIENT_ID"
"OIDC_CLIENT_SECRET"
"OPENAI_BASE_URL"
"OPENAI_API_KEY"
)
# If any secrets are set, prefer them over base environment variables.
for var in "${secret_supported_vars[@]}"; do
file_var="${var}_FILE"
if [ -n "${!file_var}" ]; then
export "$var=$(<"${!file_var}")"
fi
done
} }
change_user change_user
init init
load_secrets
# Start API # Start API
HOST_IP=`/sbin/ip route|awk '/default/ { print $3 }'` HOST_IP=`/sbin/ip route|awk '/default/ { print $3 }'`
exec python /app/mealie/main.py exec mealie

View file

@ -0,0 +1,40 @@
# Building Packages
Released packages are [built and published via GitHub actions](maintainers.md#drafting-releases).
## Python packages
To build Python packages locally for testing, use [`task`](starting-dev-server.md#without-dev-containers). After installing `task`, run `task py:package` to perform all the steps needed to build the package and a requirements file. To do it manually, run:
```sh
pushd frontend
yarnpkg install
yarnpkg generate
popd
rm -r mealie/frontend
cp -a frontend/dist mealie/frontend
poetry build
poetry export -n --only=main --extras=pgsql --output=dist/requirements.txt
MEALIE_VERSION=$(poetry version --short)
echo "mealie[pgsql]==${MEALIE_VERSION} \\" >> dist/requirements.txt
poetry run pip hash dist/mealie-${MEALIE_VERSION}-py3-none-any.whl | tail -n1 | tr -d '\n' >> dist/requirements.txt
echo " \\" >> dist/requirements.txt
poetry run pip hash dist/mealie-${MEALIE_VERSION}.tar.gz | tail -n1 >> dist/requirements.txt
```
The Python package can be installed with all of its dependencies pinned to the versions tested by the developers with:
```sh
pip3 install -r dist/requirements.txt --find-links dist
```
To install with the latest but still compatible dependency versions, instead run `pip3 install dist/mealie-$VERSION-py3-none-any.whl` (where `$VERSION` is the version of mealie to install).
## Docker image
One way to build the Docker image is to run the following command in the project root directory:
```sh
docker build --tag mealie:dev --file docker/Dockerfile --build-arg COMMIT=$(git rev-parse HEAD) .
```
The Docker image can be built from the pre-built Python packages with the task command `task docker:build-from-package`. This is equivalent to:
```sh
docker build --tag mealie:dev --file docker/Dockerfile --build-arg COMMIT=$(git rev-parse HEAD) --build-context packages=dist .
```

View file

@ -148,7 +148,7 @@
```shell ```shell
docker exec -it mealie bash docker exec -it mealie bash
python /app/mealie/scripts/reset_locked_users.py python /opt/mealie/lib/python3.12/site-packages/reset_locked_users.py
``` ```
@ -161,7 +161,7 @@
```shell ```shell
docker exec -it mealie bash docker exec -it mealie bash
python /app/mealie/scripts/make_admin.py python /opt/mealie/lib/python3.12/site-packages/make_admin.py
``` ```
@ -174,7 +174,7 @@
```shell ```shell
docker exec -it mealie bash docker exec -it mealie bash
python /app/mealie/scripts/change_password.py python /opt/mealie/lib/python3.12/site-packages/mealie/scripts/change_password.py
``` ```

View file

@ -35,7 +35,7 @@ Mealie has a robust and flexible recipe organization system with a few different
#### Categories #### Categories
Categories are the overarching organizer for recipes. You can assign as many categories as you'd like to a recipe, but we recommend that you try to limit the categories you assign to a recipe to one or two. This helps keep categories as focused as possible while still allowing you to find recipes that are related to each other. For example, you might assign a recipe to the category **Breakfast**, **Lunch**, **Dinner**, or **Side**. Categories are the overarching organizer for recipes. You can assign as many categories as you'd like to a recipe, but we recommend that you try to limit the categories you assign to a recipe to one or two. This helps keep categories as focused as possible while still allowing you to find recipes that are related to each other. For example, you might assign a recipe to the category **Breakfast**, **Lunch**, **Dinner**, **Side**, or **Drinks**.
[Categories Demo](https://demo.mealie.io/g/home/recipes/categories){ .md-button .md-button--primary } [Categories Demo](https://demo.mealie.io/g/home/recipes/categories){ .md-button .md-button--primary }
@ -84,7 +84,30 @@ The meal planner has the concept of plan rules. These offer a flexible way to us
The shopping lists feature is a great way to keep track of what you need to buy for your next meal. You can add items directly to the shopping list or link a recipe and all of it's ingredients to track meals during the week. The shopping lists feature is a great way to keep track of what you need to buy for your next meal. You can add items directly to the shopping list or link a recipe and all of it's ingredients to track meals during the week.
Managing shopping lists can be done from the Sidebar > Shopping Lists.
Here you will be able to:
- See items already on the Shopping List
- See linked recipes with ingredients
- Toggling via the 'Pot' icon will show you the linked recipe, allowing you to click to access it.
- Check off an item
- Add / Change / Remove / Sort Items via the grid icon
- Be sure if you are modifying an ingredient to click the 'Save' icon.
- Add / Change / Remove / Sort Labels
- 'No Label' will always be on the top, others can be Reordered via the 'Reorder Labels' button
!!! tip
If you accidentally checked off an item, you can uncheck it by expanding 'items checked' and unchecking it. This will add it back to the Shopping List.
!!! tip
You can use Labels to categorize your ingredients. You may want to Label by Food Type (Frozen, Fresh, etc), by Store, Tool, Recipe, or more. Play around with this to see what works best for you.
!!! tip
You can toggle 'Food' on items so that if you add multiple of the same food / ingredient, Mealie will automatically combine them together. Do this by editing an item in the Shopping List and clicking the 'Apple' icon. If you then have recipes that contain "1 | cup | cheese" and "2 | cup | cheese" this would be combined to show "3 cups of cheese."
[See FAQ for more information](../getting-started/faq.md)
[Shopping List Demo](https://demo.mealie.io/shopping-lists){ .md-button .md-button--primary } [Shopping List Demo](https://demo.mealie.io/shopping-lists){ .md-button .md-button--primary }
## Integrations ## Integrations
@ -94,9 +117,9 @@ Mealie is designed to integrate with many different external services. There are
### Notifiers ### Notifiers
Notifiers are event-driven notifications sent when specific actions are performed within Mealie. Some actions include: Notifiers are event-driven notifications sent when specific actions are performed within Mealie. Some actions include:
- creating a recipe - Creating / Updating a recipe
- adding items to a shopping list - Adding items to a shopping list
- creating a new mealplan - Creating a new mealplan
Notifiers use the [Apprise library](https://github.com/caronc/apprise/wiki), which integrates with a large number of notification services. In addition, certain custom notifiers send basic event data to the consumer (e.g. the `id` of the resource). These include: Notifiers use the [Apprise library](https://github.com/caronc/apprise/wiki), which integrates with a large number of notification services. In addition, certain custom notifiers send basic event data to the consumer (e.g. the `id` of the resource). These include:

View file

@ -31,27 +31,27 @@
### Database ### Database
| Variables | Default | Description | | Variables | Default | Description |
| --------------------- | :------: | ----------------------------------------------------------------------- | | ------------------------------------------------------- | :------: | ----------------------------------------------------------------------- |
| DB_ENGINE | sqlite | Optional: 'sqlite', 'postgres' | | DB_ENGINE | sqlite | Optional: 'sqlite', 'postgres' |
| POSTGRES_USER | mealie | Postgres database user | | POSTGRES_USER<super>[&dagger;][secrets]</super> | mealie | Postgres database user |
| POSTGRES_PASSWORD | mealie | Postgres database password | | POSTGRES_PASSWORD<super>[&dagger;][secrets]</super> | mealie | Postgres database password |
| POSTGRES_SERVER | postgres | Postgres database server address | | POSTGRES_SERVER<super>[&dagger;][secrets]</super> | postgres | Postgres database server address |
| POSTGRES_PORT | 5432 | Postgres database port | | POSTGRES_PORT<super>[&dagger;][secrets]</super> | 5432 | Postgres database port |
| POSTGRES_DB | mealie | Postgres database name | | POSTGRES_DB<super>[&dagger;][secrets]</super> | mealie | Postgres database name |
| POSTGRES_URL_OVERRIDE | None | Optional Postgres URL override to use instead of POSTGRES\_\* variables | | POSTGRES_URL_OVERRIDE<super>[&dagger;][secrets]</super> | None | Optional Postgres URL override to use instead of POSTGRES\_\* variables |
### Email ### Email
| Variables | Default | Description | | Variables | Default | Description |
| ------------------ | :-----: | ------------------------------------------------- | | ----------------------------------------------- | :-----: | ------------------------------------------------- |
| SMTP_HOST | None | Required For email | | SMTP_HOST<super>[&dagger;][secrets]</super> | None | Required For email |
| SMTP_PORT | 587 | Required For email | | SMTP_PORT<super>[&dagger;][secrets]</super> | 587 | Required For email |
| SMTP_FROM_NAME | Mealie | Required For email | | SMTP_FROM_NAME | Mealie | Required For email |
| SMTP_AUTH_STRATEGY | TLS | Required For email, Options: 'TLS', 'SSL', 'NONE' | | SMTP_AUTH_STRATEGY | TLS | Required For email, Options: 'TLS', 'SSL', 'NONE' |
| SMTP_FROM_EMAIL | None | Required For email | | SMTP_FROM_EMAIL | None | Required For email |
| SMTP_USER | None | Required if SMTP_AUTH_STRATEGY is 'TLS' or 'SSL' | | SMTP_USER<super>[&dagger;][secrets]</super> | None | Required if SMTP_AUTH_STRATEGY is 'TLS' or 'SSL' |
| SMTP_PASSWORD | None | Required if SMTP_AUTH_STRATEGY is 'TLS' or 'SSL' | | SMTP_PASSWORD<super>[&dagger;][secrets]</super> | None | Required if SMTP_AUTH_STRATEGY is 'TLS' or 'SSL' |
### Webworker ### Webworker
@ -72,21 +72,21 @@ Use this only when mealie is run without a webserver or reverse proxy.
### LDAP ### LDAP
| Variables | Default | Description | | Variables | Default | Description |
| -------------------- | :-----: | ----------------------------------------------------------------------------------------------------------------------------------- | | ----------------------------------------------------- | :-----: | ----------------------------------------------------------------------------------------------------------------------------------- |
| LDAP_AUTH_ENABLED | False | Authenticate via an external LDAP server in addidion to built-in Mealie auth | | LDAP_AUTH_ENABLED | False | Authenticate via an external LDAP server in addidion to built-in Mealie auth |
| LDAP_SERVER_URL | None | LDAP server URL (e.g. ldap://ldap.example.com) | | LDAP_SERVER_URL<super>[&dagger;][secrets]</super> | None | LDAP server URL (e.g. ldap://ldap.example.com) |
| LDAP_TLS_INSECURE | False | Do not verify server certificate when using secure LDAP | | LDAP_TLS_INSECURE | False | Do not verify server certificate when using secure LDAP |
| LDAP_TLS_CACERTFILE | None | File path to Certificate Authority used to verify server certificate (e.g. `/path/to/ca.crt`) | | LDAP_TLS_CACERTFILE | None | File path to Certificate Authority used to verify server certificate (e.g. `/path/to/ca.crt`) |
| LDAP_ENABLE_STARTTLS | False | Optional. Use STARTTLS to connect to the server | | LDAP_ENABLE_STARTTLS | False | Optional. Use STARTTLS to connect to the server |
| LDAP_BASE_DN | None | Starting point when searching for users authentication (e.g. `CN=Users,DC=xx,DC=yy,DC=de`) | | LDAP_BASE_DN | None | Starting point when searching for users authentication (e.g. `CN=Users,DC=xx,DC=yy,DC=de`) |
| LDAP_QUERY_BIND | None | Optional bind user for LDAP search queries (e.g. `cn=admin,cn=users,dc=example,dc=com`). If `None` then anonymous bind will be used | | LDAP_QUERY_BIND | None | Optional bind user for LDAP search queries (e.g. `cn=admin,cn=users,dc=example,dc=com`). If `None` then anonymous bind will be used |
| LDAP_QUERY_PASSWORD | None | Optional password for the bind user used in LDAP_QUERY_BIND | | LDAP_QUERY_PASSWORD<super>[&dagger;][secrets]</super> | None | Optional password for the bind user used in LDAP_QUERY_BIND |
| LDAP_USER_FILTER | None | Optional LDAP filter to narrow down eligible users (e.g. `(memberOf=cn=mealie_user,dc=example,dc=com)`) | | LDAP_USER_FILTER | None | Optional LDAP filter to narrow down eligible users (e.g. `(memberOf=cn=mealie_user,dc=example,dc=com)`) |
| LDAP_ADMIN_FILTER | None | Optional LDAP filter, which tells Mealie the LDAP user is an admin (e.g. `(memberOf=cn=admins,dc=example,dc=com)`) | | LDAP_ADMIN_FILTER | None | Optional LDAP filter, which tells Mealie the LDAP user is an admin (e.g. `(memberOf=cn=admins,dc=example,dc=com)`) |
| LDAP_ID_ATTRIBUTE | uid | The LDAP attribute that maps to the user's id | | LDAP_ID_ATTRIBUTE | uid | The LDAP attribute that maps to the user's id |
| LDAP_NAME_ATTRIBUTE | name | The LDAP attribute that maps to the user's name | | LDAP_NAME_ATTRIBUTE | name | The LDAP attribute that maps to the user's name |
| LDAP_MAIL_ATTRIBUTE | mail | The LDAP attribute that maps to the user's email | | LDAP_MAIL_ATTRIBUTE | mail | The LDAP attribute that maps to the user's email |
### OpenID Connect (OIDC) ### OpenID Connect (OIDC)
@ -94,23 +94,24 @@ Use this only when mealie is run without a webserver or reverse proxy.
For usage, see [Usage - OpenID Connect](../authentication/oidc-v2.md) For usage, see [Usage - OpenID Connect](../authentication/oidc-v2.md)
| Variables | Default | Description | | Variables | Default | Description |
|---------------------------------------------------|:-------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ----------------------------------------------------------------------------------- | :-----: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| OIDC_AUTH_ENABLED | False | Enables authentication via OpenID Connect | | OIDC_AUTH_ENABLED | False | Enables authentication via OpenID Connect |
| OIDC_SIGNUP_ENABLED | True | Enables new users to be created when signing in for the first time with OIDC | | OIDC_SIGNUP_ENABLED | True | Enables new users to be created when signing in for the first time with OIDC |
| OIDC_CONFIGURATION_URL | None | The URL to the OIDC configuration of your provider. This is usually something like https://auth.example.com/.well-known/openid-configuration | | OIDC_CONFIGURATION_URL<super>[&dagger;][secrets]</super> | None | The URL to the OIDC configuration of your provider. This is usually something like https://auth.example.com/.well-known/openid-configuration |
| OIDC_CLIENT_ID | None | The client id of your configured client in your provider | | OIDC_CLIENT_ID<super>[&dagger;][secrets]</super> | None | The client id of your configured client in your provider |
| OIDC_CLIENT_SECRET <br/> :octicons-tag-24: v2.0.0 | None | The client secret of your configured client in your provider | | OIDC_CLIENT_SECRET<super>[&dagger;][secrets]</super> <br/> :octicons-tag-24: v2.0.0 | None | The client secret of your configured client in your provider |
| OIDC_USER_GROUP | None | If specified, only users belonging to this group will be able to successfully authenticate. For more information see [this page](../authentication/oidc-v2.md#groups) | | OIDC_USER_GROUP | None | If specified, only users belonging to this group will be able to successfully authenticate, regardless of the `OIDC_ADMIN_GROUP`. For more information see [this page](../authentication/oidc.md#groups) |
| OIDC_ADMIN_GROUP | None | If specified, users belonging to this group will be able to successfully authenticate *and* be made an admin. For more information see [this page](../authentication/oidc-v2.md#groups) | | OIDC_ADMIN_GROUP | None | If specified, users belonging to this group will be made an admin. For more information see [this page](../authentication/oidc.md#groups) |
| OIDC_AUTO_REDIRECT | False | If `True`, then the login page will be bypassed and you will be sent directly to your Identity Provider. You can still get to the login page by adding `?direct=1` to the login URL | | OIDC_AUTO_REDIRECT | False | If `True`, then the login page will be bypassed an you will be sent directly to your Identity Provider. You can still get to the login page by adding `?direct=1` to the login URL |
| OIDC_PROVIDER_NAME | OAuth | The provider name is shown in SSO login button. "Login with <OIDC_PROVIDER_NAME\>" | | OIDC_PROVIDER_NAME | OAuth | The provider name is shown in SSO login button. "Login with <OIDC_PROVIDER_NAME\>" |
| OIDC_REMEMBER_ME | False | Because redirects bypass the login screen, you cant extend your session by clicking the "Remember Me" checkbox. By setting this value to true, a session will be extended as if "Remember Me" was checked | | OIDC_REMEMBER_ME | False | Because redirects bypass the login screen, you cant extend your session by clicking the "Remember Me" checkbox. By setting this value to true, a session will be extended as if "Remember Me" was checked |
| OIDC_USER_CLAIM | email | This is the claim which Mealie will use to look up an existing user by (e.g. "email", "preferred_username") | | OIDC_SIGNING_ALGORITHM | RS256 | The algorithm used to sign the id token (examples: RS256, HS256) |
| OIDC_NAME_CLAIM | name | This is the claim which Mealie will use for the users Full Name | | OIDC_USER_CLAIM | email | This is the claim which Mealie will use to look up an existing user by (e.g. "email", "preferred_username") |
| OIDC_GROUPS_CLAIM | groups | Optional if not using `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP`. This is the claim Mealie will request from your IdP and will use to compare to `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP` to allow the user to log in to Mealie or is set as an admin. **Your IdP must be configured to grant this claim** | | OIDC_NAME_CLAIM | name | This is the claim which Mealie will use for the users Full Name |
| OIDC_SCOPES_OVERRIDE | None | Advanced configuration used to override the scopes requested from the IdP. **Most users won't need to change this**. At a minimum, 'openid profile email' are required. | | OIDC_GROUPS_CLAIM | groups | Optional if not using `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP`. This is the claim Mealie will request from your IdP and will use to compare to `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP` to allow the user to log in to Mealie or is set as an admin. **Your IdP must be configured to grant this claim** |
| OIDC_TLS_CACERTFILE | None | File path to Certificate Authority used to verify server certificate (e.g. `/path/to/ca.crt`) | | OIDC_SCOPES_OVERRIDE | None | Advanced configuration used to override the scopes requested from the IdP. **Most users won't need to change this**. At a minimum, 'openid profile email' are required. |
| OIDC_TLS_CACERTFILE | None | File path to Certificate Authority used to verify server certificate (e.g. `/path/to/ca.crt`) |
### OpenAI ### OpenAI
@ -119,17 +120,17 @@ For usage, see [Usage - OpenID Connect](../authentication/oidc-v2.md)
Mealie supports various integrations using OpenAI. For more information, check out our [OpenAI documentation](./open-ai.md). Mealie supports various integrations using OpenAI. For more information, check out our [OpenAI documentation](./open-ai.md).
For custom mapping variables (e.g. OPENAI_CUSTOM_HEADERS) you should pass values as JSON encoded strings (e.g. `OPENAI_CUSTOM_PARAMS='{"k1": "v1", "k2": "v2"}'`) For custom mapping variables (e.g. OPENAI_CUSTOM_HEADERS) you should pass values as JSON encoded strings (e.g. `OPENAI_CUSTOM_PARAMS='{"k1": "v1", "k2": "v2"}'`)
| Variables | Default | Description | | Variables | Default | Description |
| ---------------------------- | :-----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------------------------------------- | :-----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| OPENAI_BASE_URL | None | The base URL for the OpenAI API. If you're not sure, leave this empty to use the standard OpenAI platform | | OPENAI_BASE_URL<super>[&dagger;][secrets]</super> | None | The base URL for the OpenAI API. If you're not sure, leave this empty to use the standard OpenAI platform |
| OPENAI_API_KEY | None | Your OpenAI API Key. Enables OpenAI-related features | | OPENAI_API_KEY<super>[&dagger;][secrets]</super> | None | Your OpenAI API Key. Enables OpenAI-related features |
| OPENAI_MODEL | gpt-4o | Which OpenAI model to use. If you're not sure, leave this empty | | OPENAI_MODEL | gpt-4o | Which OpenAI model to use. If you're not sure, leave this empty |
| OPENAI_CUSTOM_HEADERS | None | Custom HTTP headers to add to all OpenAI requests. This should generally be left empty unless your custom service requires them | | OPENAI_CUSTOM_HEADERS | None | Custom HTTP headers to add to all OpenAI requests. This should generally be left empty unless your custom service requires them |
| OPENAI_CUSTOM_PARAMS | None | Custom HTTP query params to add to all OpenAI requests. This should generally be left empty unless your custom service requires them | | OPENAI_CUSTOM_PARAMS | None | Custom HTTP query params to add to all OpenAI requests. This should generally be left empty unless your custom service requires them |
| OPENAI_ENABLE_IMAGE_SERVICES | True | Whether to enable OpenAI image services, such as creating recipes via image. Leave this enabled unless your custom model doesn't support it, or you want to reduce costs | | OPENAI_ENABLE_IMAGE_SERVICES | True | Whether to enable OpenAI image services, such as creating recipes via image. Leave this enabled unless your custom model doesn't support it, or you want to reduce costs |
| OPENAI_WORKERS | 2 | Number of OpenAI workers per request. Higher values may increase processing speed, but will incur additional API costs | | OPENAI_WORKERS | 2 | Number of OpenAI workers per request. Higher values may increase processing speed, but will incur additional API costs |
| OPENAI_SEND_DATABASE_DATA | True | Whether to send Mealie data to OpenAI to improve request accuracy. This will incur additional API costs | | OPENAI_SEND_DATABASE_DATA | True | Whether to send Mealie data to OpenAI to improve request accuracy. This will incur additional API costs |
| OPENAI_REQUEST_TIMEOUT | 60 | The number of seconds to wait for an OpenAI request to complete before cancelling the request. Leave this empty unless you're running into timeout issues on slower hardware | | OPENAI_REQUEST_TIMEOUT | 60 | The number of seconds to wait for an OpenAI request to complete before cancelling the request. Leave this empty unless you're running into timeout issues on slower hardware |
### Theming ### Theming
@ -154,24 +155,80 @@ Setting the following environmental variables will change the theme of the front
### Docker Secrets ### Docker Secrets
Setting a credential can be done using secrets when running in a Docker container. ### Docker Secrets
This can be used to avoid leaking passwords through compose files, environment variables, or command-line history.
For example, to configure the Postgres database password in Docker compose, create a file on the host that contains only the password, and expose that file to the Mealie service as a secret with the correct name. > <super>&dagger;</super> Starting in version `2.4.2`, any environment variable in the preceding lists with a dagger
Note that environment variables take priority over secrets, so any previously defined environment variables should be removed when migrating to secrets. > symbol next to them support the Docker Compose secrets pattern, below.
[Docker Compose secrets][docker-secrets] can be used to secure sensitive information regarding the Mealie implementation
by managing control of each secret independently from the single `.env` file. This is helpful for users that may need
different levels of access for various, sensitive environment variables, such as differentiating between hardening
operations (e.g., server endpoints and ports) and user access control (e.g., usernames, passwords, and API keys).
To convert any of these environment variables to a Docker Compose secret, append `_FILE` to the environment variable and
connect it with a Docker Compose secret, per the [Docker documentation][docker-secrets].
If both the base environment variable and the secret pattern of the environment variable are set, the secret will always
take precedence.
For example, a user that wishes to harden their operations by only giving some access to their database URL, but who
wish to place additional security around their user access control, may have a Docker Compose configuration similar to:
```yaml ```yaml
services: services:
mealie: mealie:
...
environment:
...
POSTGRES_USER: postgres
secrets: secrets:
- POSTGRES_PASSWORD # These secrets will be loaded by Docker into the `/run/secrets` folder within the container.
- postgres-host
- postgres-port
- postgres-db-name
- postgres-user
- postgres-password
environment:
DB_ENGINE: postgres
POSTGRES_SERVER: duplicate.entry.tld # This will be ignored, due to the secret defined, below.
POSTGRES_SERVER_FILE: /run/secrets/postgres-host
POSTGRES_PORT_FILE: /run/secrets/postgres-port
POSTGRES_DB_FILE: /run/secrets/postgres-db-name
POSTGRES_USER_FILE: /run/secrets/postgres-user
POSTGRES_PASSWORD_FILE: /run/secrets/postgres-password
# Each of these secrets are loaded via these local files. Different patterns are available. See the Docker Compose
# documentation for more information.
secrets: secrets:
POSTGRES_PASSWORD: postgres-host:
file: postgrespassword.txt file: ./secrets/postgres-host.txt
postgres-port:
file: ./secrets/postgres-port.txt
postgres-db-name:
file: ./secrets/sensitive/postgres-db-name.txt
postgres-user:
file: ./secrets/sensitive/postgres-user.txt
postgres-password:
file: ./secrets/sensitive/postgres-password.txt
```
In the example above, a directory organization and access pattern may look like the following:
```text
.
├── docker-compose.yml
└── secrets # Access restricted to anyone that can manage secrets
├── postgres-host.txt
├── postgres-port.txt
└── sensitive # Access further-restricted to anyone managing service accounts
├── postgres-db-name.txt
├── postgres-password.txt
└── postgres-user.txt
``` ```
How you organize your secrets is ultimately up to you. At minimum, it's highly recommended to use secret patterns for
at least these sensitive environment variables when working within shared environments:
- `POSTGRES_PASSWORD`
- `SMTP_PASSWORD`
- `LDAP_QUERY_PASSWORD`
- `OPENAI_API_KEY`
[docker-secrets]: https://docs.docker.com/compose/use-secrets/
[secrets]: #docker-secrets
[unicorn_workers]: https://www.uvicorn.org/deployment/#built-in [unicorn_workers]: https://www.uvicorn.org/deployment/#built-in

View file

@ -31,7 +31,7 @@ To deploy mealie on your local network, it is highly recommended to use Docker t
We've gone through a few versions of Mealie v1 deployment targets. We have settled on a single container deployment, and we've begun publishing the nightly container on github containers. If you're looking to move from the old nightly (split containers _or_ the omni image) to the new nightly, there are a few things you need to do: We've gone through a few versions of Mealie v1 deployment targets. We have settled on a single container deployment, and we've begun publishing the nightly container on github containers. If you're looking to move from the old nightly (split containers _or_ the omni image) to the new nightly, there are a few things you need to do:
1. Take a backup just in case! 1. Take a backup just in case!
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v2.5.0` 2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v2.8.0`
3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access. 3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access.
4. Restart the container 4. Restart the container

View file

@ -7,7 +7,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
```yaml ```yaml
services: services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:v2.5.0 # (3) image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
container_name: mealie container_name: mealie
restart: always restart: always
ports: ports:

View file

@ -11,7 +11,7 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
```yaml ```yaml
services: services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:v2.5.0 # (3) image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
container_name: mealie container_name: mealie
restart: always restart: always
ports: ports:

View file

@ -1,17 +1,24 @@
# Backups and Restoring # Backups and Restores
Mealie provides an integrated mechanics for doing full installation backups of the database. Navigate to `/admin/backups` to Mealie provides an integrated mechanic for doing full installation backups of the database.
Navigate to Settings > Backups or manually by adding `/admin/backups` to your instance URL.
From this page, you will be able to:
- See a list of available backups - See a list of available backups
- Perform a backups - Create a backup
- Restore a backup - Upload a backup
- Delete a backup (Confirmation Required)
- Download a backup
- Perform a restore
!!! tip !!! tip
If you're using Mealie with SQLite all your data is stored in the /app/data/ folder in the container. You can easily perform entire site backups by stopping the container, and backing up this folder with your chosen tool. This is the **best** way to backup your data. If you're using Mealie with SQLite all your data is stored in the /app/data/ folder in the container. You can easily perform entire site backups by stopping the container, and backing up this folder with your chosen tool. This is the **best** way to backup your data.
## Restoring from a Backup ## Restoring from a Backup
To restore from a backup it needs to be uploaded to your instance, this can be done through the web portal. On the lower left hand corner of the backups data table you'll see an upload button. Click this button and select the backup file you want to upload and it will be available to import shortly. To restore from a backup it needs to be uploaded to your instance which can be done through the web portal. On the top left of the page you'll see an upload button. Click this button and select the backup file you want to upload and it will be available to import shortly. You can alternatively use one of the backups you see on the screen, if one exists.
Before importing it's critical that you understand the following: Before importing it's critical that you understand the following:
@ -19,6 +26,9 @@ Before importing it's critical that you understand the following:
- This action cannot be undone - This action cannot be undone
- If this action is successful you will be logged out and you will need to log back in to complete the restore - If this action is successful you will be logged out and you will need to log back in to complete the restore
!!! tip
If for some reason the restore does not succeed, you can review the logs of what the issue may be, download the backup .ZIP and edit the contents of database.json to potentially resolve the issue. For example, if you receive an error restoring 'shopping-list' you can edit out the contents of that list while allowing other sections to restore. If you would like any assistance on this, reach out over Discord.
!!! warning !!! warning
Prior to beta-v5 using a mis-matched version of the database backup will result in an error that will prevent you from using the instance of Mealie requiring you to remove all data and reinstall. Post beta-v5 performing a mismatched restore will throw an error and alert the user of the issue. Prior to beta-v5 using a mis-matched version of the database backup will result in an error that will prevent you from using the instance of Mealie requiring you to remove all data and reinstall. Post beta-v5 performing a mismatched restore will throw an error and alert the user of the issue.

View file

@ -99,6 +99,7 @@ nav:
- Non-Code: "contributors/non-coders.md" - Non-Code: "contributors/non-coders.md"
- Translating: "contributors/translating.md" - Translating: "contributors/translating.md"
- Developers Guide: - Developers Guide:
- Building Packages: "contributors/developers-guide/building-packages.md"
- Code Contributions: "contributors/developers-guide/code-contributions.md" - Code Contributions: "contributors/developers-guide/code-contributions.md"
- Dev Getting Started: "contributors/developers-guide/starting-dev-server.md" - Dev Getting Started: "contributors/developers-guide/starting-dev-server.md"
- Database Changes: "contributors/developers-guide/database-changes.md" - Database Changes: "contributors/developers-guide/database-changes.md"

View file

@ -138,8 +138,8 @@ import RecipeIngredientListItem from "./RecipeIngredientListItem.vue";
import { useUserApi } from "~/composables/api"; import { useUserApi } from "~/composables/api";
import { alert } from "~/composables/use-toast"; import { alert } from "~/composables/use-toast";
import { useShoppingListPreferences } from "~/composables/use-users/preferences"; import { useShoppingListPreferences } from "~/composables/use-users/preferences";
import { ShoppingListSummary } from "~/lib/api/types/household"; import { RecipeIngredient, ShoppingListAddRecipeParamsBulk, ShoppingListSummary } from "~/lib/api/types/household";
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe"; import { Recipe } from "~/lib/api/types/recipe";
export interface RecipeWithScale extends Recipe { export interface RecipeWithScale extends Recipe {
scale: number; scale: number;
@ -342,12 +342,12 @@ export default defineComponent({
} }
async function addRecipesToList() { async function addRecipesToList() {
const promises: Promise<any>[] = []; if (!selectedShoppingList.value) {
recipeIngredientSections.value.forEach((section) => { return;
if (!selectedShoppingList.value) { }
return;
}
const recipeData: ShoppingListAddRecipeParamsBulk[] = [];
recipeIngredientSections.value.forEach((section) => {
const ingredients: RecipeIngredient[] = []; const ingredients: RecipeIngredient[] = [];
section.ingredientSections.forEach((ingSection) => { section.ingredientSections.forEach((ingSection) => {
ingSection.ingredients.forEach((ing) => { ingSection.ingredients.forEach((ing) => {
@ -361,24 +361,18 @@ export default defineComponent({
return; return;
} }
promises.push(api.shopping.lists.addRecipe( recipeData.push(
selectedShoppingList.value.id, {
section.recipeId, recipeId: section.recipeId,
section.recipeScale, recipeIncrementQuantity: section.recipeScale,
ingredients, recipeIngredients: ingredients,
)); }
);
}); });
let success = true; const { error } = await api.shopping.lists.addRecipes(selectedShoppingList.value.id, recipeData);
const results = await Promise.allSettled(promises); error ? alert.error(i18n.tc("recipe.failed-to-add-recipes-to-list"))
results.forEach((result) => { : alert.success(i18n.tc("recipe.successfully-added-to-list"));
if (result.status === "rejected") {
success = false;
}
})
success ? alert.success(i18n.tc("recipe.successfully-added-to-list"))
: alert.error(i18n.tc("failed-to-add-recipes-to-list"))
state.shoppingListDialog = false; state.shoppingListDialog = false;
state.shoppingListIngredientDialog = false; state.shoppingListIngredientDialog = false;

View file

@ -86,29 +86,27 @@
</BaseDialog> </BaseDialog>
</div> </div>
<div> <div>
<div class="d-flex justify-center flex-wrap"> <div v-if="lastMadeReady" class="d-flex justify-center flex-wrap">
<v-chip <v-row no-gutters class="d-flex flex-wrap align-center" style="font-size: larger;">
label <v-tooltip bottom>
:small="$vuetify.breakpoint.smAndDown" <template #activator="{ on, attrs }">
color="accent custom-transparent" <v-btn
class="ma-1 pa-3" rounded
> outlined
<v-icon left> x-large
{{ $globals.icons.calendar }} color="primary"
</v-icon> v-bind="attrs"
<div v-if="lastMadeReady"> v-on="on"
{{ $t('recipe.last-made-date', { date: lastMade ? new Date(lastMade).toLocaleDateString($i18n.locale) : $t("general.never") } ) }} @click="madeThisDialog = true"
</div> >
<div v-else> <v-icon left large>{{ $globals.icons.calendar }}</v-icon>
<AppLoader tiny /> <span class="text--secondary" style="letter-spacing: normal;"><b>{{ $tc("general.last-made") }}</b><br>{{ lastMade ? new Date(lastMade).toLocaleDateString($i18n.locale) : $tc("general.never") }}</span>
</div> <v-icon right large>{{ $globals.icons.createAlt }}</v-icon>
</v-chip> </v-btn>
</div> </template>
<div class="d-flex justify-center flex-wrap mt-1"> <span>{{ $tc("recipe.made-this") }}</span>
<BaseButton :small="$vuetify.breakpoint.smAndDown" @click="madeThisDialog = true"> </v-tooltip>
<template #icon> {{ $globals.icons.chefHat }} </template> </v-row>
{{ $t('recipe.made-this') }}
</BaseButton>
</div> </div>
</div> </div>
</div> </div>

View file

@ -14,15 +14,16 @@
</v-card-title> </v-card-title>
<v-divider class="my-2" /> <v-divider class="my-2" />
<SafeMarkdown :source="recipe.description" /> <SafeMarkdown :source="recipe.description" />
<v-divider /> <v-divider v-if="recipe.description" />
<v-container class="d-flex flex-row flex-wrap justify-center align-center"> <v-container class="d-flex flex-row flex-wrap justify-center">
<div class="mx-5"> <div class="mx-6">
<v-row no-gutters class="mb-1"> <v-row no-gutters>
<v-col v-if="recipe.recipeYieldQuantity || recipe.recipeYield" cols="12" class="d-flex flex-wrap justify-center"> <v-col v-if="recipe.recipeYieldQuantity || recipe.recipeYield" cols="12" class="d-flex flex-wrap justify-center">
<RecipeYield <RecipeYield
:yield-quantity="recipe.recipeYieldQuantity" :yield-quantity="recipe.recipeYieldQuantity"
:yield="recipe.recipeYield" :yield="recipe.recipeYield"
:scale="recipeScale" :scale="recipeScale"
class="mb-4"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -31,18 +32,18 @@
<RecipeLastMade <RecipeLastMade
v-if="isOwnGroup" v-if="isOwnGroup"
:recipe="recipe" :recipe="recipe"
:class="true ? undefined : 'force-bottom'" class="mb-4"
/> />
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
<div class="mx-5"> <div class="mx-6">
<RecipeTimeCard <RecipeTimeCard
stacked
container-class="d-flex flex-wrap justify-center" container-class="d-flex flex-wrap justify-center"
:prep-time="recipe.prepTime" :prep-time="recipe.prepTime"
:total-time="recipe.totalTime" :total-time="recipe.totalTime"
:perform-time="recipe.performTime" :perform-time="recipe.performTime"
class="mb-4"
/> />
</div> </div>
</v-container> </v-container>

View file

@ -30,12 +30,17 @@
<span v-html="recipeYield"></span> <span v-html="recipeYield"></span>
</v-chip> </v-chip>
</div> </div>
<RecipeTimeCard <v-row class="d-flex justify-start">
:prep-time="recipe.prepTime" <RecipeTimeCard
:total-time="recipe.totalTime" :prep-time="recipe.prepTime"
:perform-time="recipe.performTime" :total-time="recipe.totalTime"
color="white" :perform-time="recipe.performTime"
/> small
color="white"
class="ml-4"
/>
</v-row>
<v-card-text v-if="preferences.showDescription" class="px-0"> <v-card-text v-if="preferences.showDescription" class="px-0">
<SafeMarkdown :source="recipe.description" /> <SafeMarkdown :source="recipe.description" />
</v-card-text> </v-card-text>

View file

@ -1,41 +1,37 @@
<template> <template v-if="showCards">
<div v-if="stacked"> <div class="text-center">
<v-container> <!-- Total Time -->
<v-row v-for="(time, index) in allTimes" :key="`${index}-stacked`" no-gutters> <div v-if="validateTotalTime" class="time-card-flex mx-auto">
<v-col cols="12" :class="containerClass"> <v-row no-gutters class="d-flex flex-no-wrap align-center " :style="fontSize">
<v-chip <v-icon :x-large="!small" left color="primary">
:small="$vuetify.breakpoint.smAndDown"
label
:color="color"
class="ma-1"
>
<v-icon left>
{{ $globals.icons.clockOutline }}
</v-icon>
{{ time.name }} |
{{ time.value }}
</v-chip>
</v-col>
</v-row>
</v-container>
</div>
<div v-else>
<v-container :class="containerClass">
<v-chip
v-for="(time, index) in allTimes"
:key="index"
:small="$vuetify.breakpoint.smAndDown"
label
:color="color"
class="ma-1"
>
<v-icon left>
{{ $globals.icons.clockOutline }} {{ $globals.icons.clockOutline }}
</v-icon> </v-icon>
{{ time.name }} | <p class="my-0"><span class="font-weight-bold">{{ validateTotalTime.name }}</span><br>{{ validateTotalTime.value }}</p>
{{ time.value }} </v-row>
</v-chip> </div>
</v-container> <v-divider v-if="validateTotalTime && (validatePrepTime || validatePerformTime)" class="my-2" />
<!-- Prep Time & Perform Time -->
<div v-if="validatePrepTime || validatePerformTime" class="time-card-flex mx-auto">
<v-row
no-gutters
class="d-flex justify-center align-center" :class="{'flex-column': $vuetify.breakpoint.smAndDown}"
style="width: 100%;" :style="fontSize"
>
<div v-if="validatePrepTime" class="d-flex flex-no-wrap my-1">
<v-icon :large="!small" :dense="small" left color="primary">
{{ $globals.icons.knfife }}
</v-icon>
<p class="my-0"><span class="font-weight-bold">{{ validatePrepTime.name }}</span><br>{{ validatePrepTime.value }}</p>
</div>
<v-divider v-if="validatePrepTime && validatePerformTime" vertical class="mx-4" />
<div v-if="validatePerformTime" class="d-flex flex-no-wrap my-1">
<v-icon :large="!small" :dense="small" left color="primary">
{{ $globals.icons.potSteam }}
</v-icon>
<p class="my-0"><span class="font-weight-bold">{{ validatePerformTime.name }}</span><br>{{ validatePerformTime.value }}</p>
</div>
</v-row>
</div>
</div> </div>
</template> </template>
@ -44,10 +40,6 @@ import { computed, defineComponent, useContext } from "@nuxtjs/composition-api";
export default defineComponent({ export default defineComponent({
props: { props: {
stacked: {
type: Boolean,
default: false,
},
prepTime: { prepTime: {
type: String, type: String,
default: null, default: null,
@ -64,9 +56,9 @@ export default defineComponent({
type: String, type: String,
default: "accent custom-transparent" default: "accent custom-transparent"
}, },
containerClass: { small: {
type: String, type: Boolean,
default: undefined, default: false,
}, },
}, },
setup(props) { setup(props) {
@ -92,13 +84,16 @@ export default defineComponent({
return !isEmpty(props.performTime) ? { name: i18n.t("recipe.perform-time"), value: props.performTime } : null; return !isEmpty(props.performTime) ? { name: i18n.t("recipe.perform-time"), value: props.performTime } : null;
}); });
const allTimes = computed(() => { const fontSize = computed(() => {
return [validateTotalTime.value, validatePrepTime.value, validatePerformTime.value].filter((x) => x !== null); return props.small ? { fontSize: "smaller" } : { fontSize: "larger" };
}); });
return { return {
showCards, showCards,
allTimes, validateTotalTime,
validatePrepTime,
validatePerformTime,
fontSize,
}; };
}, },
}); });

View file

@ -1,21 +1,20 @@
<template> <template>
<div v-if="displayText" class="d-flex justify-space-between align-center"> <div v-if="scaledAmount" class="d-flex align-center">
<v-chip <v-row no-gutters class="d-flex flex-wrap align-center" style="font-size: larger;">
:small="$vuetify.breakpoint.smAndDown" <v-icon x-large left color="primary">
label {{ $globals.icons.bread }}
:color="color"
>
<v-icon left>
{{ $globals.icons.potSteam }}
</v-icon> </v-icon>
<!-- eslint-disable-next-line vue/no-v-html --> <p class="my-0">
<span v-html="displayText"></span> <span class="font-weight-bold">{{ $i18n.tc("recipe.yield") }}</span><br>
</v-chip> <!-- eslint-disable-next-line vue/no-v-html -->
<span v-html="scaledAmount"></span> {{ text }}
</p>
</v-row>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, useContext } from "@nuxtjs/composition-api"; import { defineComponent, computed } from "@nuxtjs/composition-api";
import DOMPurify from "dompurify"; import DOMPurify from "dompurify";
import { useScaledAmount } from "~/composables/recipes/use-scaled-amount"; import { useScaledAmount } from "~/composables/recipes/use-scaled-amount";
@ -39,7 +38,6 @@ export default defineComponent({
}, },
}, },
setup(props) { setup(props) {
const { i18n } = useContext();
function sanitizeHTML(rawHtml: string) { function sanitizeHTML(rawHtml: string) {
return DOMPurify.sanitize(rawHtml, { return DOMPurify.sanitize(rawHtml, {
@ -48,21 +46,15 @@ export default defineComponent({
}); });
} }
const displayText = computed(() => { const scaledAmount = computed(() => {
if (!(props.yieldQuantity || props.yield)) { const {scaledAmountDisplay} = useScaledAmount(props.yieldQuantity, props.scale);
return ""; return scaledAmountDisplay;
}
const { scaledAmountDisplay } = useScaledAmount(props.yieldQuantity, props.scale);
return i18n.t("recipe.yields-amount-with-text", {
amount: scaledAmountDisplay,
text: sanitizeHTML(props.yield),
}) as string;
}); });
const text = sanitizeHTML(props.yield);
return { return {
displayText, scaledAmount,
text,
}; };
}, },
}); });

View file

@ -34,6 +34,7 @@
:label="$t('shopping-list.note')" :label="$t('shopping-list.note')"
rows="1" rows="1"
auto-grow auto-grow
autofocus
@keypress="handleNoteKeyPress" @keypress="handleNoteKeyPress"
></v-textarea> ></v-textarea>
</div> </div>
@ -80,37 +81,37 @@
<v-spacer /> <v-spacer />
</div> </div>
</v-card-text> </v-card-text>
<v-card-actions class="ma-0 pt-0 pb-1 justify-end">
<BaseButtonGroup
:buttons="[
...(allowDelete ? [{
icon: $globals.icons.delete,
text: $t('general.delete'),
event: 'delete',
}] : []),
{
icon: $globals.icons.close,
text: $t('general.cancel'),
event: 'cancel',
},
{
icon: $globals.icons.foods,
text: $t('shopping-list.toggle-food'),
event: 'toggle-foods',
},
{
icon: $globals.icons.save,
text: $t('general.save'),
event: 'save',
},
]"
@save="$emit('save')"
@cancel="$emit('cancel')"
@delete="$emit('delete')"
@toggle-foods="listItem.isFood = !listItem.isFood"
/>
</v-card-actions>
</v-card> </v-card>
<v-card-actions class="ma-0 pt-0 pb-1 justify-end">
<BaseButtonGroup
:buttons="[
{
icon: $globals.icons.delete,
text: $t('general.delete'),
event: 'delete',
},
{
icon: $globals.icons.close,
text: $t('general.cancel'),
event: 'cancel',
},
{
icon: $globals.icons.foods,
text: $t('shopping-list.toggle-food'),
event: 'toggle-foods',
},
{
icon: $globals.icons.save,
text: $t('general.save'),
event: 'save',
},
]"
@save="$emit('save')"
@cancel="$emit('cancel')"
@delete="$emit('delete')"
@toggle-foods="listItem.isFood = !listItem.isFood"
/>
</v-card-actions>
</div> </div>
</template> </template>
@ -139,6 +140,11 @@ export default defineComponent({
type: Array as () => IngredientFood[], type: Array as () => IngredientFood[],
required: true, required: true,
}, },
allowDelete: {
type: Boolean,
required: false,
default: true,
},
}, },
setup(props, context) { setup(props, context) {
const foodStore = useFoodStore(); const foodStore = useFoodStore();

View file

@ -15,7 +15,7 @@
"docs": "Dokumentasie", "docs": "Dokumentasie",
"download-log": "Laai loglêer af", "download-log": "Laai loglêer af",
"download-recipe-json": "Laaste geskraapde JSON", "download-recipe-json": "Laaste geskraapde JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Log lyne", "log-lines": "Log lyne",
"not-demo": "Nie Demonstrasie Nie", "not-demo": "Nie Demonstrasie Nie",
"portfolio": "Portefeulje", "portfolio": "Portefeulje",
@ -579,7 +579,6 @@
"made-this": "Ek het dit gemaak", "made-this": "Ek het dit gemaak",
"how-did-it-turn-out": "Hoe het dit uitgedraai?", "how-did-it-turn-out": "Hoe het dit uitgedraai?",
"user-made-this": "{user} het dit gemaak", "user-made-this": "{user} het dit gemaak",
"last-made-date": "Laas gemaak {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Boodskap sleutel", "message-key": "Boodskap sleutel",
"parse": "Verwerk", "parse": "Verwerk",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Herlaai vanaf back-up", "backup-restore": "Herlaai vanaf back-up",
"back-restore-description": "Die herstel van hierdie back-up sal alle huidige data in jou databasis en in die data-lêergids oorskryf. {cannot-be-undone} As die herstel suksesvol was, sal jy afgemeld word.", "back-restore-description": "Die herstel van hierdie back-up sal alle huidige data in jou databasis en in die data-lêergids oorskryf. {cannot-be-undone} As die herstel suksesvol was, sal jy afgemeld word.",
"cannot-be-undone": "Hierdie aksie kan nie ongedaan gemaak word nie - gebruik met omsigtigheid.", "cannot-be-undone": "Hierdie aksie kan nie ongedaan gemaak word nie - gebruik met omsigtigheid.",
"postgresql-note": "Gebruik jy PostGreSQL? Lees asseblief eers die {backup-restore-process} voordat jy dit herstel.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/herstelproses in die dokumentasie", "backup-restore-process-in-the-documentation": "backup/herstelproses in die dokumentasie",
"irreversible-acknowledgment": "Ek verstaan dat hierdie aksie onomkeerbaar en vernietigend is en dataverlies kan veroorsaak", "irreversible-acknowledgment": "Ek verstaan dat hierdie aksie onomkeerbaar en vernietigend is en dataverlies kan veroorsaak",
"restore-backup": "Herlaai back-up" "restore-backup": "Herlaai back-up"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Die kombinasie van die geselekteerde kosse sal die oorspronklike kos en die nuwe kos kombineer. Die oorspronklike kos sal verwyder word en alle verwysings sal opgedateer word om na die nuwe kos te wys.", "merge-dialog-text": "Die kombinasie van die geselekteerde kosse sal die oorspronklike kos en die nuwe kos kombineer. Die oorspronklike kos sal verwyder word en alle verwysings sal opgedateer word om na die nuwe kos te wys.",
"merge-food-example": "Voeg {food1} saam met {food2}", "merge-food-example": "Voeg {food1} saam met {food2}",
"seed-dialog-text": "Vul die databasis met kosse in jou taal. Dit skep 200+ algemene kosse wat jy in jou databasis kan gebruik. Die vertalings word deur 'n gemeenskap verskaf.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Jy het reeds 'n paar items in jou databasis. Hierdie aksie sal nie duplikate versoen nie, jy sal dit met die hand moet bestuur.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Kombineer kos", "combine-food": "Kombineer kos",
"source-food": "Bron voedsel", "source-food": "Bron voedsel",
"target-food": "Teiken voedsel", "target-food": "Teiken voedsel",

File diff suppressed because it is too large Load diff

View file

@ -579,7 +579,6 @@
"made-this": "Сготвих рецептата", "made-this": "Сготвих рецептата",
"how-did-it-turn-out": "Как се получи?", "how-did-it-turn-out": "Как се получи?",
"user-made-this": "{user} направи това", "user-made-this": "{user} направи това",
"last-made-date": "Последно приготвена на {date}",
"api-extras-description": "Екстрите за рецепти са ключова характеристика на Mealie API. Те Ви позволяват да създавате персонализирани JSON двойки ключ/стойност в рамките на рецепта, за да ги препращате към други приложения. Можете да използвате тези ключове, за да предоставите информация за задействане на автоматизация или персонализирани съобщения, за препращане към желаното от Вас устройство.", "api-extras-description": "Екстрите за рецепти са ключова характеристика на Mealie API. Те Ви позволяват да създавате персонализирани JSON двойки ключ/стойност в рамките на рецепта, за да ги препращате към други приложения. Можете да използвате тези ключове, за да предоставите информация за задействане на автоматизация или персонализирани съобщения, за препращане към желаното от Вас устройство.",
"message-key": "Ключ на съобщението", "message-key": "Ключ на съобщението",
"parse": "Анализирай", "parse": "Анализирай",
@ -647,7 +646,6 @@
"nextStep": "Следваща стъпка", "nextStep": "Следваща стъпка",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Възстановяване на резервно копие", "backup-restore": "Възстановяване на резервно копие",
"back-restore-description": "Възстановяването на това резервно копие ще презапише цялата текуща информация във Вашата база данни и директорията с данни, и ще ги замени със съдържанието от резервното копие. {cannot-be-undone} Ако възстановяването е успешно ще бъдете отписан от системата.", "back-restore-description": "Възстановяването на това резервно копие ще презапише цялата текуща информация във Вашата база данни и директорията с данни, и ще ги замени със съдържанието от резервното копие. {cannot-be-undone} Ако възстановяването е успешно ще бъдете отписан от системата.",
"cannot-be-undone": "Това действие не може да бъде отменено - използвайте с внимание.", "cannot-be-undone": "Това действие не може да бъде отменено - използвайте с внимание.",
"postgresql-note": "Ако използвате PostGreSQL, моля прегледайте {backup-restore-process} преди възстановяването.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "процес за резервно копие/възстановяване в документацията", "backup-restore-process-in-the-documentation": "процес за резервно копие/възстановяване в документацията",
"irreversible-acknowledgment": "Разбирам, че това действие е невъзвращаемо, разрушително и може да доведе до загуба на данни", "irreversible-acknowledgment": "Разбирам, че това действие е невъзвращаемо, разрушително и може да доведе до загуба на данни",
"restore-backup": "Възстановяване на резервно копие" "restore-backup": "Възстановяване на резервно копие"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Комбинирането на избраните храни ще обедини изходната храна и целевата храна в една единствена храна. Изходната храна ще бъде изтрита и всички препратки към изходната храна ще бъдат актуализирани, за да сочат към целевата храна.", "merge-dialog-text": "Комбинирането на избраните храни ще обедини изходната храна и целевата храна в една единствена храна. Изходната храна ще бъде изтрита и всички препратки към изходната храна ще бъдат актуализирани, за да сочат към целевата храна.",
"merge-food-example": "Обединяване на {food1} с {food2}", "merge-food-example": "Обединяване на {food1} с {food2}",
"seed-dialog-text": "Изтеглете базата данни с продукти на вашия местен език. Ще бъдат заредени 200+ продукта, които да използвате за организиране на вашата база данни. Имената на продуктите се превеждат от общността.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Вече имате някои елементи във Вашата база данни. Това действие няма да съгласува дубликати, ще трябва да ги управлявате ръчно.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Комбинирай Храни", "combine-food": "Комбинирай Храни",
"source-food": "Изходна храна", "source-food": "Изходна храна",
"target-food": "Целева храна", "target-food": "Целева храна",

View file

@ -15,7 +15,7 @@
"docs": "Documentació", "docs": "Documentació",
"download-log": "Descarregueu el registre", "download-log": "Descarregueu el registre",
"download-recipe-json": "Últim JSON recuperat", "download-recipe-json": "Últim JSON recuperat",
"github": "Github", "github": "GitHub",
"log-lines": "Registre Línies", "log-lines": "Registre Línies",
"not-demo": "No Demo", "not-demo": "No Demo",
"portfolio": "Projectes", "portfolio": "Projectes",
@ -579,7 +579,6 @@
"made-this": "Ho he fet", "made-this": "Ho he fet",
"how-did-it-turn-out": "Com ha sortit?", "how-did-it-turn-out": "Com ha sortit?",
"user-made-this": "{user} ha fet això", "user-made-this": "{user} ha fet això",
"last-made-date": "Última vegada feta {date}",
"api-extras-description": "Els extres de receptes són una funcionalitat clau de l'API de Mealie. Permeten crear parells clau/valor JSON personalitzats dins una recepta, per referenciar-los des d'aplicacions de tercers. Pots emprar aquestes claus per proveir informació, per exemple per a desencadenar automatitzacions o missatges personlitzats per a propagar al teu dispositiu desitjat.", "api-extras-description": "Els extres de receptes són una funcionalitat clau de l'API de Mealie. Permeten crear parells clau/valor JSON personalitzats dins una recepta, per referenciar-los des d'aplicacions de tercers. Pots emprar aquestes claus per proveir informació, per exemple per a desencadenar automatitzacions o missatges personlitzats per a propagar al teu dispositiu desitjat.",
"message-key": "Clau del missatge", "message-key": "Clau del missatge",
"parse": "Analitzar", "parse": "Analitzar",
@ -647,7 +646,6 @@
"nextStep": "Següent pas", "nextStep": "Següent pas",
"recipe-actions": "Accions de la Recepta", "recipe-actions": "Accions de la Recepta",
"parser": { "parser": {
"experimental-alert-text": "Mealie fa servir processament de llenguatge natural per processar i crear unitats i elements de menjar pels ingredients de la teva recepta. Aquesta funcionalitat és experimental i pot no funcionar com s'espera. Si prefereixes no fer servir els resultats processats, pots seleccionar \"Cancel·la\" i els canvis no es guardaran.",
"ingredient-parser": "Processador d'ingredients", "ingredient-parser": "Processador d'ingredients",
"explanation": "Per fer servir el processador d'aliments, clica el botó \"Processa tot\" per començar el procés. Un cop els ingredients processats estiguin disponibles, pots revisar-los per comprovar que s'hagin processat degudament. La confiança del model és mostrada a la dreta del títol de l'element. Aquesta puntuació es la mitja de totes les puntuacions individuals i pot no ser del tot precisa.", "explanation": "Per fer servir el processador d'aliments, clica el botó \"Processa tot\" per començar el procés. Un cop els ingredients processats estiguin disponibles, pots revisar-los per comprovar que s'hagin processat degudament. La confiança del model és mostrada a la dreta del títol de l'element. Aquesta puntuació es la mitja de totes les puntuacions individuals i pot no ser del tot precisa.",
"alerts-explainer": "Es mostraran alertes si un menjar o unitat coincident es troben però no existeixen a la base de dades.", "alerts-explainer": "Es mostraran alertes si un menjar o unitat coincident es troben però no existeixen a la base de dades.",
@ -722,7 +720,7 @@
"backup-restore": "Restaura la còpia de seguretat", "backup-restore": "Restaura la còpia de seguretat",
"back-restore-description": "Restaurar aquesta còpia de seguretat sobreescriurà totes les dades actuals de la teva base de dades i qualsevol directori i els substituirà amb el contingut d'aquesta còpia de seguretat. {cannot-be-undone} Si la restauració es duu a terme correctament, se us tancarà la sessió.", "back-restore-description": "Restaurar aquesta còpia de seguretat sobreescriurà totes les dades actuals de la teva base de dades i qualsevol directori i els substituirà amb el contingut d'aquesta còpia de seguretat. {cannot-be-undone} Si la restauració es duu a terme correctament, se us tancarà la sessió.",
"cannot-be-undone": "Aquesta acció no es pot desfer. Utilitza-la amb precaució.", "cannot-be-undone": "Aquesta acció no es pot desfer. Utilitza-la amb precaució.",
"postgresql-note": "Si estàs fent servir PostGresSQL, si us plau, revisa el {backup-restore-process} abans de fer la restauració.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "el procés de còpia de seguretat i restauració es troba a la documentació", "backup-restore-process-in-the-documentation": "el procés de còpia de seguretat i restauració es troba a la documentació",
"irreversible-acknowledgment": "Entenc que aquesta acció és irreversible, destructiva i pot ocasionar la pèrdua de dades", "irreversible-acknowledgment": "Entenc que aquesta acció és irreversible, destructiva i pot ocasionar la pèrdua de dades",
"restore-backup": "Restaura la còpia de seguretat" "restore-backup": "Restaura la còpia de seguretat"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Combinant els aliments seleccionats, es fusionaran els dos aliments en un. El primer aliment serà eliminat i totes les referències s'actualitzaran a l'aliment resultant.", "merge-dialog-text": "Combinant els aliments seleccionats, es fusionaran els dos aliments en un. El primer aliment serà eliminat i totes les referències s'actualitzaran a l'aliment resultant.",
"merge-food-example": "Combinant {food1} i {food2}", "merge-food-example": "Combinant {food1} i {food2}",
"seed-dialog-text": "Afegeix a la base de dades els noms dels aliments en el vostre idioma. Açò crearà més de 200 aliments comuns per a què pugueu organitzar la vostra base de dades. Els noms dels aliments han estat traduïts gràcies a l'esforç de la comunitat.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Ja teniu algunes dades a la vostra base. Aquesta acció no tindrà en compte duplicats i haureu d'eliminar-los manualment.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Combinar Aliment", "combine-food": "Combinar Aliment",
"source-food": "Aliment d'Origen", "source-food": "Aliment d'Origen",
"target-food": "Aliment de Destí", "target-food": "Aliment de Destí",

View file

@ -15,7 +15,7 @@
"docs": "Dokumentace", "docs": "Dokumentace",
"download-log": "Stáhnout log", "download-log": "Stáhnout log",
"download-recipe-json": "Poslední scrapovaný JSON", "download-recipe-json": "Poslední scrapovaný JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Řádky logů", "log-lines": "Řádky logů",
"not-demo": "Není demo", "not-demo": "Není demo",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -579,7 +579,6 @@
"made-this": "Toto jsem uvařil", "made-this": "Toto jsem uvařil",
"how-did-it-turn-out": "Jak to dopadlo?", "how-did-it-turn-out": "Jak to dopadlo?",
"user-made-this": "{user} udělal toto", "user-made-this": "{user} udělal toto",
"last-made-date": "Naposledy uvařeno {date}",
"api-extras-description": "Recepty jsou klíčovým rysem rozhraní pro API Mealie. Umožňují vytvářet vlastní klíče/hodnoty JSON v rámci receptu pro odkazy na aplikace třetích stran. Tyto klíče můžete použít pro poskytnutí informací, například pro aktivaci automatizace nebo vlastních zpráv pro přenos do požadovaného zařízení.", "api-extras-description": "Recepty jsou klíčovým rysem rozhraní pro API Mealie. Umožňují vytvářet vlastní klíče/hodnoty JSON v rámci receptu pro odkazy na aplikace třetích stran. Tyto klíče můžete použít pro poskytnutí informací, například pro aktivaci automatizace nebo vlastních zpráv pro přenos do požadovaného zařízení.",
"message-key": "Klíč zprávy", "message-key": "Klíč zprávy",
"parse": "Analyzovat", "parse": "Analyzovat",
@ -647,7 +646,6 @@
"nextStep": "Další krok", "nextStep": "Další krok",
"recipe-actions": "Akce receptu", "recipe-actions": "Akce receptu",
"parser": { "parser": {
"experimental-alert-text": "Mealie používá přirozené zpracování jazyka k analýze a vytváření jednotek a položek jídla pro vaše ingredience. Tato funkce je experimentální a nemusí vždy fungovat podle očekávání. Pokud raději nepoužíváte analyzované výsledky, můžete zvolit 'Zrušit' a vaše změny nebudou uloženy.",
"ingredient-parser": "Analyzátor ingrediencí", "ingredient-parser": "Analyzátor ingrediencí",
"explanation": "Chcete-li použít analyzátor ingrediencí, klikněte na tlačítko \"Analyzovat vše\" pro zahájení procesu. Jakmile budou zpracované suroviny k dispozici, můžete zkontrolovat položky a ověřit, že byly správně analyzovány. Skóre důvěry modelu se zobrazuje vpravo od názvu položky. Toto skóre je průměrem všech jednotlivých skóre a nemusí být vždy zcela přesné.", "explanation": "Chcete-li použít analyzátor ingrediencí, klikněte na tlačítko \"Analyzovat vše\" pro zahájení procesu. Jakmile budou zpracované suroviny k dispozici, můžete zkontrolovat položky a ověřit, že byly správně analyzovány. Skóre důvěry modelu se zobrazuje vpravo od názvu položky. Toto skóre je průměrem všech jednotlivých skóre a nemusí být vždy zcela přesné.",
"alerts-explainer": "Upozornění se zobrazí v případě, že je nalezena odpovídající potravina nebo jednotka, ale v databázi neexistuje.", "alerts-explainer": "Upozornění se zobrazí v případě, že je nalezena odpovídající potravina nebo jednotka, ale v databázi neexistuje.",
@ -722,7 +720,7 @@
"backup-restore": "Obnova zálohy", "backup-restore": "Obnova zálohy",
"back-restore-description": "Obnovení této zálohy přepíše všechna aktuální data ve vaší databázi a v datovém adresáři a nahradí je obsahem této zálohy. {cannot-be-undone} Pokud je obnovení úspěšné, budete odhlášeni.", "back-restore-description": "Obnovení této zálohy přepíše všechna aktuální data ve vaší databázi a v datovém adresáři a nahradí je obsahem této zálohy. {cannot-be-undone} Pokud je obnovení úspěšné, budete odhlášeni.",
"cannot-be-undone": "Tuto akci nelze vrátit zpět - používejte ji s opatrností.", "cannot-be-undone": "Tuto akci nelze vrátit zpět - používejte ji s opatrností.",
"postgresql-note": "Pokud používáte PostgreSQL, před obnovením si prosím přečtete {backup-restore-process}.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "proces zálohy/obnovení v dokumentaci", "backup-restore-process-in-the-documentation": "proces zálohy/obnovení v dokumentaci",
"irreversible-acknowledgment": "Beru na vědomí, že tato akce je nevratná, destruktivní a může způsobit ztrátu dat", "irreversible-acknowledgment": "Beru na vědomí, že tato akce je nevratná, destruktivní a může způsobit ztrátu dat",
"restore-backup": "Obnovit zálohu" "restore-backup": "Obnovit zálohu"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Zkombinování zvolených potravin způsobí smazání zdrojové potraviny a veškeré odkazy na ni budou přesměrovány do cílové potraviny.", "merge-dialog-text": "Zkombinování zvolených potravin způsobí smazání zdrojové potraviny a veškeré odkazy na ni budou přesměrovány do cílové potraviny.",
"merge-food-example": "Sloučení {food1} do {food2}", "merge-food-example": "Sloučení {food1} do {food2}",
"seed-dialog-text": "Naplňte databázi potravinami z vašeho jazyka. Tímto vytvoříte přes 200 běžných potravin, které můžete použít k organizaci vaší databáze. Potravny jsou přeloženy skrze komunitní úsilí.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Již v databázi máte nějaká data. Tato akce neodstraní duplicity, budete je muset odstranit ručně.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Kombinovat jídlo", "combine-food": "Kombinovat jídlo",
"source-food": "Zdrojové jídlo", "source-food": "Zdrojové jídlo",
"target-food": "Cílové jídlo", "target-food": "Cílové jídlo",

View file

@ -15,7 +15,7 @@
"docs": "Dokumenter", "docs": "Dokumenter",
"download-log": "Download log", "download-log": "Download log",
"download-recipe-json": "Sidst skrabet JSON", "download-recipe-json": "Sidst skrabet JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Log linjer", "log-lines": "Log linjer",
"not-demo": "Ikke demo", "not-demo": "Ikke demo",
"portfolio": "Portefølje", "portfolio": "Portefølje",
@ -30,7 +30,7 @@
"code": "Kode", "code": "Kode",
"file": "Fil", "file": "Fil",
"image": "Billede", "image": "Billede",
"new-asset": "Ny aktiv", "new-asset": "Nyt aktiv",
"pdf": "PDF", "pdf": "PDF",
"recipe": "Opskrift", "recipe": "Opskrift",
"show-assets": "Vis ekstramateriale", "show-assets": "Vis ekstramateriale",
@ -71,13 +71,13 @@
"apprise-url-skipped-if-blank": "Informations link (sprunget over hvis ladet være tomt)", "apprise-url-skipped-if-blank": "Informations link (sprunget over hvis ladet være tomt)",
"enable-notifier": "Aktiver Notifikationer", "enable-notifier": "Aktiver Notifikationer",
"what-events": "Hvilke begivenheder skal denne anmelder abonnere på?", "what-events": "Hvilke begivenheder skal denne anmelder abonnere på?",
"user-events": "Bruger Hændelser", "user-events": "Brugerhændelser",
"mealplan-events": "Måltidsplan Begivenheder", "mealplan-events": "Måltidsplansbegivenheder",
"when-a-user-in-your-group-creates-a-new-mealplan": "Når en bruger i din gruppe opretter en ny måltidsplan", "when-a-user-in-your-group-creates-a-new-mealplan": "Når en bruger i din gruppe opretter en ny måltidsplan",
"shopping-list-events": "Indkøbsliste begivenheder", "shopping-list-events": "Indkøbslistebegivenheder",
"cookbook-events": "Kogebogs Begivenheder", "cookbook-events": "Kogebogsbegivenheder",
"tag-events": "Tag Begivenheder", "tag-events": "Tagbegivenheder",
"category-events": "Kategori Begivenheder", "category-events": "Kategoribegivenheder",
"when-a-new-user-joins-your-group": "Når en ny bruger slutter sig til din gruppe", "when-a-new-user-joins-your-group": "Når en ny bruger slutter sig til din gruppe",
"recipe-events": "Hændelser for opskrifter" "recipe-events": "Hændelser for opskrifter"
}, },
@ -88,21 +88,21 @@
"close": "Luk", "close": "Luk",
"confirm": "Bekræft", "confirm": "Bekræft",
"confirm-how-does-everything-look": "Hvordan ser alting ud?", "confirm-how-does-everything-look": "Hvordan ser alting ud?",
"confirm-delete-generic": "Er du sikker på, du vil slette dette?", "confirm-delete-generic": "Er du sikker på, at du vil slette dette?",
"copied_message": "Kopieret!", "copied_message": "Kopieret!",
"create": "Opret", "create": "Opret",
"created": "Oprettet", "created": "Oprettet",
"custom": "Brugerdefineret", "custom": "Brugerdefineret",
"dashboard": "Instrumentbræt", "dashboard": "Overblik",
"delete": "Slet", "delete": "Slet",
"disabled": "Deaktiveret", "disabled": "Deaktiveret",
"download": "Hent", "download": "Hent",
"duplicate": "Dublikér", "duplicate": "Kopier",
"edit": "Rediger", "edit": "Rediger",
"enabled": "Aktiveret", "enabled": "Aktiveret",
"exception": "Undtagelse", "exception": "Afvigelse",
"failed-count": "Fejlet: {count}", "failed-count": "Fejlet: {count}",
"failure-uploading-file": "Fejl ved upload af fil", "failure-uploading-file": "Filupload fejlede",
"favorites": "Favoritter", "favorites": "Favoritter",
"field-required": "Felt påkrævet", "field-required": "Felt påkrævet",
"file-folder-not-found": "Fil/mappe ikke fundet", "file-folder-not-found": "Fil/mappe ikke fundet",
@ -113,7 +113,7 @@
"get": "Hent", "get": "Hent",
"home": "Hjem", "home": "Hjem",
"image": "Billede", "image": "Billede",
"image-upload-failed": "Upload af billede fejlede", "image-upload-failed": "Billedeupload fejlede",
"import": "Importere", "import": "Importere",
"json": "JSON", "json": "JSON",
"keyword": "Nøgleord", "keyword": "Nøgleord",
@ -134,7 +134,7 @@
"options": "Valgmuligheder:", "options": "Valgmuligheder:",
"plural-name": "Navn i flertal", "plural-name": "Navn i flertal",
"print": "Udskriv", "print": "Udskriv",
"print-preferences": "Print indstillinger", "print-preferences": "Printindstillinger",
"random": "Tilfældig", "random": "Tilfældig",
"rating": "Bedømmelse", "rating": "Bedømmelse",
"recent": "Seneste", "recent": "Seneste",
@ -150,7 +150,7 @@
"shuffle": "Bland", "shuffle": "Bland",
"sort": "Sorter", "sort": "Sorter",
"sort-ascending": "Sorter stigende", "sort-ascending": "Sorter stigende",
"sort-descending": "Sorter Faldende", "sort-descending": "Sorter faldende",
"sort-alphabetically": "Alfabetisk", "sort-alphabetically": "Alfabetisk",
"status": "Status", "status": "Status",
"subject": "Emne", "subject": "Emne",
@ -163,7 +163,7 @@
"themes": "Temaer", "themes": "Temaer",
"thursday": "Torsdag", "thursday": "Torsdag",
"title": "Titel", "title": "Titel",
"token": "Token", "token": "Nøgle",
"tuesday": "Tirsdag", "tuesday": "Tirsdag",
"type": "Type", "type": "Type",
"update": "Gem", "update": "Gem",
@ -207,7 +207,7 @@
"selected-count": "Valgt: {count}", "selected-count": "Valgt: {count}",
"export-all": "Eksportér alle", "export-all": "Eksportér alle",
"refresh": "Opdater", "refresh": "Opdater",
"upload-file": "Upload Fil", "upload-file": "Upload fil",
"created-on-date": "Oprettet den: {0}", "created-on-date": "Oprettet den: {0}",
"unsaved-changes": "Du har ændringer som ikke er gemt. Vil du gemme før du forlader? Vælg \"Okay\" for at gemme, eller \"Annullér\" for at kassere ændringer.", "unsaved-changes": "Du har ændringer som ikke er gemt. Vil du gemme før du forlader? Vælg \"Okay\" for at gemme, eller \"Annullér\" for at kassere ændringer.",
"clipboard-copy-failure": "Kopiering til udklipsholderen mislykkedes.", "clipboard-copy-failure": "Kopiering til udklipsholderen mislykkedes.",
@ -217,7 +217,7 @@
"show-advanced": "Vis avanceret", "show-advanced": "Vis avanceret",
"add-field": "Tilføj felt", "add-field": "Tilføj felt",
"date-created": "Oprettet", "date-created": "Oprettet",
"date-updated": "Dato opdateret" "date-updated": "Opdateret"
}, },
"group": { "group": {
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på, du vil slette <b>{groupName}<b/>?", "are-you-sure-you-want-to-delete-the-group": "Er du sikker på, du vil slette <b>{groupName}<b/>?",
@ -232,7 +232,7 @@
"group-id-with-value": "Gruppe-ID: {groupID}", "group-id-with-value": "Gruppe-ID: {groupID}",
"group-name": "Gruppenavn", "group-name": "Gruppenavn",
"group-not-found": "Gruppen blev ikke fundet", "group-not-found": "Gruppen blev ikke fundet",
"group-token": "Gruppe Token", "group-token": "Gruppetoken",
"group-with-value": "Gruppe: {groupID}", "group-with-value": "Gruppe: {groupID}",
"groups": "Grupper", "groups": "Grupper",
"manage-groups": "Administrer grupper", "manage-groups": "Administrer grupper",
@ -240,7 +240,7 @@
"user-group-created": "Brugergruppe oprettet", "user-group-created": "Brugergruppe oprettet",
"user-group-creation-failed": "Oprettelse af brugergruppe fejlede", "user-group-creation-failed": "Oprettelse af brugergruppe fejlede",
"settings": { "settings": {
"keep-my-recipes-private": "Bevar mine opskrifter private", "keep-my-recipes-private": "Hold mine opskrifter private",
"keep-my-recipes-private-description": "Ændrer din gruppe og alle opskrifter til private. Du kan altid ændre dette senere." "keep-my-recipes-private-description": "Ændrer din gruppe og alle opskrifter til private. Du kan altid ændre dette senere."
}, },
"manage-members": "Administrer medlemmer", "manage-members": "Administrer medlemmer",
@ -250,17 +250,17 @@
"invite": "Invitér", "invite": "Invitér",
"looking-to-update-your-profile": "Ønsker du at opdatere din profil?", "looking-to-update-your-profile": "Ønsker du at opdatere din profil?",
"default-recipe-preferences-description": "Dette er standardindstillingerne, når en ny opskrift oprettes i din gruppe. Indstillingerne kan ændres for en opskrift i menuen Opskriftindstillinger.", "default-recipe-preferences-description": "Dette er standardindstillingerne, når en ny opskrift oprettes i din gruppe. Indstillingerne kan ændres for en opskrift i menuen Opskriftindstillinger.",
"default-recipe-preferences": "Standard Opskrift Indstillinger", "default-recipe-preferences": "Standard opskriftsindstillinger",
"group-preferences": "Gruppe Indstillinger", "group-preferences": "Gruppeindstillinger",
"private-group": "Privat Gruppe", "private-group": "Privat gruppe",
"private-group-description": "Sættes din husholdning til privat vil det deaktivere alle indstillinger for offentlig visning. Dette tilsidesætter individuelle indstillinger for offentlig visning", "private-group-description": "Sættes din husholdning til privat vil det deaktivere alle indstillinger for offentlig visning. Dette tilsidesætter individuelle indstillinger for offentlig visning",
"enable-public-access": "Aktiver Offentlig Adgang", "enable-public-access": "Aktiver offentlig adgang",
"enable-public-access-description": "Gør gruppeopskrifter offentlige som standard, og tillade besøgende at se opskrifter uden at logge ind", "enable-public-access-description": "Gør gruppeopskrifter offentlige som standard, og tillade besøgende at se opskrifter uden at logge ind",
"allow-users-outside-of-your-group-to-see-your-recipes": "Tillad brugere udenfor din gruppe at se dine opskrifter", "allow-users-outside-of-your-group-to-see-your-recipes": "Tillad brugere udenfor din gruppe at se dine opskrifter",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Når aktiveret kan du bruge et link til offentlig deling til at dele specifikke opskrifter uden at oprette en bruger. Når deaktiveret, kan du kun dele opskrifter med brugere, der er i din gruppe eller med et prægenereret privat link", "allow-users-outside-of-your-group-to-see-your-recipes-description": "Når aktiveret kan du bruge et link til offentlig deling til at dele specifikke opskrifter uden at oprette en bruger. Når deaktiveret, kan du kun dele opskrifter med brugere, der er i din gruppe eller med et prægenereret privat link",
"show-nutrition-information": "Vis ernæringsoplysninger", "show-nutrition-information": "Vis ernæringsoplysninger",
"show-nutrition-information-description": "Når aktiveret vil ernæringsinformationen blive vist på opskriften hvis den er tilgængelig. Hvis der ikke findes nogen ernæringsinformation, vil dette ikke blive vist", "show-nutrition-information-description": "Når aktiveret vil ernæringsinformationen blive vist på opskriften hvis den er tilgængelig. Hvis der ikke findes nogen ernæringsinformation, vil dette ikke blive vist",
"show-recipe-assets": "Vis opskrift aktiver", "show-recipe-assets": "Vis opskriftsaktiver",
"show-recipe-assets-description": "Når aktiveret vil opskriftens ekstramaterialer blive vist på opskriften hvis tilgængelig", "show-recipe-assets-description": "Når aktiveret vil opskriftens ekstramaterialer blive vist på opskriften hvis tilgængelig",
"default-to-landscape-view": "Vælg landskabsvisning som standard", "default-to-landscape-view": "Vælg landskabsvisning som standard",
"default-to-landscape-view-description": "Når aktiveret vil opskriftens top sektion blive vist i liggende visning", "default-to-landscape-view-description": "Når aktiveret vil opskriftens top sektion blive vist i liggende visning",
@ -272,8 +272,8 @@
"group-recipe-preferences": "Gruppe Indstillinger for opskrifter", "group-recipe-preferences": "Gruppe Indstillinger for opskrifter",
"report": "Rapport", "report": "Rapport",
"report-with-id": "Rapport ID: {id}", "report-with-id": "Rapport ID: {id}",
"group-management": "Gruppe Håndtering", "group-management": "Gruppeadministration",
"admin-group-management": "Administrationsgruppe Håndtering", "admin-group-management": "Administratorgruppeadministration",
"admin-group-management-text": "Ændringer i denne gruppe vil træde i kraft øjeblikkeligt.", "admin-group-management-text": "Ændringer i denne gruppe vil træde i kraft øjeblikkeligt.",
"group-id-value": "Gruppe-ID: {0}", "group-id-value": "Gruppe-ID: {0}",
"total-households": "Husholdninger i Alt", "total-households": "Husholdninger i Alt",
@ -282,30 +282,30 @@
"household": { "household": {
"household": "Husholdning", "household": "Husholdning",
"households": "Husholdninger", "households": "Husholdninger",
"user-household": "Bruger Husholdning", "user-household": "Husholdning",
"create-household": "Opret Husholdning", "create-household": "Opret husholdning",
"household-name": "Husholdningens Navn", "household-name": "Husholdningens navn",
"household-group": "Husholdnings Gruppe", "household-group": "Husholdnings Gruppe",
"household-management": "Husholdnings Administration", "household-management": "Husholdningsadministration",
"manage-households": "Administrer Husholdninger", "manage-households": "Administrer husholdninger",
"admin-household-management": "Admin Husholdnings Administration", "admin-household-management": "Husholdningsadministration",
"admin-household-management-text": "Ændringer ved denne husholdning vil træde i kraft øjeblikkeligt.", "admin-household-management-text": "Ændringer ved denne husholdning vil træde i kraft øjeblikkeligt.",
"household-id-value": "Husholdning Id: {0}", "household-id-value": "Id: {0}",
"private-household": "Privat Husholdning", "private-household": "Privat husholdning",
"private-household-description": "Sættes din husholdning til private vil det deaktivere alle indstillinger for offentlig visning. Dette tilsidesætter individuelle indstillinger for offentlig visning", "private-household-description": "Sættes din husholdning til private vil det deaktivere alle indstillinger for offentlig visning. Dette tilsidesætter individuelle indstillinger for offentlig visning",
"lock-recipe-edits-from-other-households": "Lås opskrift redigeringer fra andre husholdninger", "lock-recipe-edits-from-other-households": "Lås ændringer fra andre husholdninger",
"lock-recipe-edits-from-other-households-description": "Når aktiveret kan kun husholdningens brugere ændre den opskrifter", "lock-recipe-edits-from-other-households-description": "Når aktiveret kan kun husholdningens brugere ændre dens opskrifter",
"household-recipe-preferences": "Husholdningens opskriftspræferencer", "household-recipe-preferences": "Husholdningens opskriftspræferencer",
"default-recipe-preferences-description": "Disse er standardindstillingerne, når en ny opskrift er oprettet i din husstand. Disse kan ændres for individuelle opskrifter i menuen Opsætninger.", "default-recipe-preferences-description": "Disse er standardindstillingerne, når en ny opskrift er oprettet i din husstand. Disse kan ændres for individuelle opskrifter i menuen Opsætninger.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Tillad brugere uden for din husstand at se dine opskrifter", "allow-users-outside-of-your-household-to-see-your-recipes": "Tillad brugere udenfor din husholdning at se dine opskrifter",
"allow-users-outside-of-your-household-to-see-your-recipes-description": "Når det er aktiveret kan du bruge et link til offentlig deling af specifikke opskrifter uden at godkende brugeren. Når deaktiveret, kan du kun dele opskrifter med brugere, der er i din husstand eller med et forudgenereret privat link", "allow-users-outside-of-your-household-to-see-your-recipes-description": "Når det er aktiveret kan du bruge et link til offentlig deling af specifikke opskrifter uden at godkende brugeren. Når deaktiveret, kan du kun dele opskrifter med brugere, der er i din husstand eller med et forudgenereret privat link",
"household-preferences": "Husholdnings Præferencer" "household-preferences": "Præferencer"
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Opret en ny madplan", "create-a-new-meal-plan": "Opret madplan",
"update-this-meal-plan": "Opdater denne måltidsplan", "update-this-meal-plan": "Ret denne madplan",
"dinner-this-week": "Madplan denne uge", "dinner-this-week": "Denne uges madplan",
"dinner-today": "Madplan i dag", "dinner-today": "Dagens madplan",
"dinner-tonight": "AFTENSMAD I AFTEN", "dinner-tonight": "AFTENSMAD I AFTEN",
"edit-meal-plan": "Rediger madplan", "edit-meal-plan": "Rediger madplan",
"end-date": "Slutdato", "end-date": "Slutdato",
@ -313,7 +313,7 @@
"main": "Hovedret", "main": "Hovedret",
"meal-planner": "Madplanlægger", "meal-planner": "Madplanlægger",
"meal-plans": "Madplan", "meal-plans": "Madplan",
"mealplan-categories": "MADPLANKATEGORIER", "mealplan-categories": "MADPLANSKATEGORIER",
"mealplan-created": "Madplan oprettet", "mealplan-created": "Madplan oprettet",
"mealplan-creation-failed": "Oprettelse af madplan fejlede", "mealplan-creation-failed": "Oprettelse af madplan fejlede",
"mealplan-deleted": "Madplan slettet", "mealplan-deleted": "Madplan slettet",
@ -322,10 +322,10 @@
"mealplan-update-failed": "Ændring af madplanen fejlede", "mealplan-update-failed": "Ændring af madplanen fejlede",
"mealplan-updated": "Madplanen blev ændret", "mealplan-updated": "Madplanen blev ændret",
"mealplan-households-description": "Hvis ingen husstand er valgt, kan opskrifter tilføjes fra enhver husstand", "mealplan-households-description": "Hvis ingen husstand er valgt, kan opskrifter tilføjes fra enhver husstand",
"any-category": "Enhver kategori", "any-category": "Alle kategorier",
"any-tag": "Ethvert tag", "any-tag": "Alle tags",
"any-household": "Enhver husholdning", "any-household": "Alle husholdninger",
"no-meal-plan-defined-yet": "Ingen madplan er defineret", "no-meal-plan-defined-yet": "Ingen madplaner er oprettet endnu",
"no-meal-planned-for-today": "Ingen ret er planlagt til i dag", "no-meal-planned-for-today": "Ingen ret er planlagt til i dag",
"numberOfDays-hint": "Antal dage ved sideindlæsning", "numberOfDays-hint": "Antal dage ved sideindlæsning",
"numberOfDays-label": "Standarddage", "numberOfDays-label": "Standarddage",
@ -334,7 +334,7 @@
"quick-week": "Hurtig uge", "quick-week": "Hurtig uge",
"side": "Tilbehør", "side": "Tilbehør",
"sides": "Tilbehør", "sides": "Tilbehør",
"start-date": "Start dato", "start-date": "Startdato",
"rule-day": "Regler for dage", "rule-day": "Regler for dage",
"meal-type": "Måltidstype", "meal-type": "Måltidstype",
"breakfast": "Morgenmad", "breakfast": "Morgenmad",
@ -365,11 +365,11 @@
"meal-plan-settings": "Indstillinger for madplanlægning" "meal-plan-settings": "Indstillinger for madplanlægning"
}, },
"migration": { "migration": {
"migration-data-removed": "Migrationsdata fjernet", "migration-data-removed": "Migreringsdata fjernet",
"new-migration": "Ny Migrering", "new-migration": "Ny migrering",
"no-file-selected": "Ingen Fil Valgt", "no-file-selected": "Ingen fil valgt",
"no-migration-data-available": "Ingen migrationsdata er tilgængelig", "no-migration-data-available": "Ingen migreringsdata er tilgængelig",
"previous-migrations": "Tidligere Migrationer", "previous-migrations": "Tidligere migreringer",
"recipe-migration": "Migrering af opskrifter", "recipe-migration": "Migrering af opskrifter",
"chowdown": { "chowdown": {
"description": "Migrer data fra Chowdown", "description": "Migrer data fra Chowdown",
@ -383,37 +383,37 @@
}, },
"copymethat": { "copymethat": {
"description-long": "Mealie kan importere opskrifter fra Copy Me That. Eksportere dine opskrifter i HTML-format, og derefter uploade .zip-filen nedenfor.", "description-long": "Mealie kan importere opskrifter fra Copy Me That. Eksportere dine opskrifter i HTML-format, og derefter uploade .zip-filen nedenfor.",
"title": "Copy Me That opskrifts håndtering" "title": "Copy Me That opskriftshåndtering"
}, },
"paprika": { "paprika": {
"description-long": "Mealie kan importere opskrifter fra Paprika applikationen. Eksporter dine opskrifter fra paprika, omdøbe eksportudvidelsen til .zip og uploade den nedenfor.", "description-long": "Mealie kan importere opskrifter fra Paprika. Eksporter dine opskrifter fra paprika, omdøbe eksportudvidelsen til .zip og uploade den nedenfor.",
"title": "Paprika Opskrifts Håndtering" "title": "Paprika Recipe Manager"
}, },
"mealie-pre-v1": { "mealie-pre-v1": {
"description-long": "Mealie kan importere opskrifter fra Mealie applikationen fra en pre v1.0 udgivelse. Eksporter dine opskrifter fra din gamle installation, og upload zip-filen nedenfor. Bemærk, at kun opskrifter kan importeres fra eksport.", "description-long": "Mealie kan importere opskrifter fra en før v1.0 udgivelse. Eksporter dine opskrifter fra din gamle installation, og upload zip-filen nedenfor. Bemærk, at kun opskrifter kan importeres fra eksport.",
"title": "Mealie Pre v1.0" "title": "Mealie før v1.0"
}, },
"tandoor": { "tandoor": {
"description-long": "Mealie kan importere opskrifter fra Tandoor. Eksporter dine data i \"Standard\" format, og upload derefter Zip filen nedenfor.", "description-long": "Mealie kan importere opskrifter fra Tandoor. Eksporter dine data i \"Standard\" format, og upload derefter Zip filen nedenfor.",
"title": "Tandoor Opskrifter" "title": "Tandoor Recipes"
}, },
"recipe-data-migrations": "Migrering af opskrifter", "recipe-data-migrations": "Migrering af opskrifter",
"recipe-data-migrations-explanation": "Opskrifter kan migreres fra et andet understøttet program til Mealie. Dette er en fantastisk måde at komme i gang med Mealie.", "recipe-data-migrations-explanation": "Opskrifter kan migreres fra et andet understøttet program til Mealie. Dette er en fantastisk måde at komme i gang med Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer fra en anden applikation eller en endnu ældre version af Mealie? Tjek migrationer og se om dine data kan importeres.", "coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer fra en anden applikation eller en endnu ældre version af Mealie? Tjek migrationer og se om dine data kan importeres.",
"choose-migration-type": "Vælg Migreringstype", "choose-migration-type": "Vælg migreringstype",
"tag-all-recipes": "Tag alle opskrifter med {tag-name} tag", "tag-all-recipes": "Tag alle opskrifter med {tag-name} tag",
"nextcloud-text": "Nextcloud opskrifter kan importeres fra en zip-fil, der indeholder data lagret i Nextcloud. Se eksempelmappestrukturen nedenfor for at sikre, at dine opskrifter kan importeres.", "nextcloud-text": "Nextcloud opskrifter kan importeres fra en zip-fil, der indeholder data lagret i Nextcloud. Se eksempelmappestrukturen nedenfor for at sikre, at dine opskrifter kan importeres.",
"chowdown-text": "Mealie understøtter chowdown repository fil formater. Download repositoriet som en .zip-fil og upload den nedenfor.", "chowdown-text": "Mealie understøtter chowdown repository fil formater. Download repositoriet som en .zip-fil og upload den nedenfor.",
"recipe-1": "Opskrift 1", "recipe-1": "Opskrift 1",
"recipe-2": "Opskrift 2", "recipe-2": "Opskrift 2",
"paprika-text": "Mealie kan importere opskrifter fra Paprika applikationen. Eksporter dine opskrifter fra paprika, omdøbe eksportudvidelsen til .zip og uploade den nedenfor.", "paprika-text": "Mealie kan importere opskrifter fra Paprika. Eksporter dine opskrifter fra paprika, omdøbe eksportudvidelsen til .zip og uploade den nedenfor.",
"mealie-text": "Mealie kan importere opskrifter fra Mealie applikationen fra en pre v1.0 udgivelse. Eksporter dine opskrifter fra din gamle installation, og upload zip-filen nedenfor. Bemærk, at kun opskrifter kan importeres fra eksport.", "mealie-text": "Mealie kan importere opskrifter fra en før v1.0 udgivelse. Eksporter dine opskrifter fra din gamle installation, og upload zip-filen nedenfor. Bemærk, at kun opskrifter kan importeres fra eksport.",
"plantoeat": { "plantoeat": {
"title": "Planlæg at spise", "title": "Plan to Eat",
"description-long": "Mealie kan importere opskrifter, der er markeret som \"Planlæg at spise\"." "description-long": "Mealie kan importere opskrifter fra Plan to Eat."
}, },
"myrecipebox": { "myrecipebox": {
"title": "Mine opskrifter", "title": "My Recipe Box",
"description-long": "Mealie kan importere opskrifter fra My Recipe Box. Eksporter dine opskrifter i CSV-format, og upload derefter .csv-filen nedenfor." "description-long": "Mealie kan importere opskrifter fra My Recipe Box. Eksporter dine opskrifter i CSV-format, og upload derefter .csv-filen nedenfor."
}, },
"recipekeeper": { "recipekeeper": {
@ -422,21 +422,21 @@
} }
}, },
"new-recipe": { "new-recipe": {
"bulk-add": "Bulk Tilføj", "bulk-add": "Tilføj flere",
"error-details": "Kun hjemmesider med ID+JSON eller microdata kan blive importeret af Mealie. De fleste større opskriftshjemmesider bruger denne struktur. Opret et emne på GitHub, hvis en hjemmeside ikke kan blive importeret, men der er JSON-data i loggen.", "error-details": "Kun hjemmesider med ld+json eller microdata kan blive importeret af Mealie. De fleste større opskriftshjemmesider bruger denne struktur. Opret et emne på GitHub, hvis en hjemmeside ikke kan blive importeret, men der er JSON-data i loggen.",
"error-title": "Det ser ud til, vi ikke kunne finde noget", "error-title": "Det ser ud til, vi ikke kunne finde noget",
"from-url": "Fra URL", "from-url": "Fra URL",
"github-issues": "GitHub problemer", "github-issues": "GitHub problemer",
"google-ld-json-info": "Google ID+JSON information", "google-ld-json-info": "Google ld+json data",
"must-be-a-valid-url": "Det skal være en korrekt URL", "must-be-a-valid-url": "Det skal være en korrekt URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Indsæt dine opskriftsdata. \nHver linje behandles som et element på en liste", "paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Indsæt dine opskriftsdata. \nHver linje behandles som et element på en liste",
"recipe-markup-specification": "Opskriftsmarkupspecifikation", "recipe-markup-specification": "Opskriftsmarkupspecifikation",
"recipe-url": "URL på opskrift", "recipe-url": "URL på opskrift",
"recipe-html-or-json": "Opskrift HTML eller JSON", "recipe-html-or-json": "Opskrift HTML eller JSON",
"upload-a-recipe": "Upload en opskrift", "upload-a-recipe": "Upload en opskrift",
"upload-individual-zip-file": "Opload en individuel .zip-fil, eksporteret fra en anden Mealie-instans.", "upload-individual-zip-file": "Upload en individuel .zip-fil, eksporteret fra en anden Mealie-instans.",
"url-form-hint": "Kopiér og indsæt et link fra din foretrukne opskrifts hjemmeside", "url-form-hint": "Kopiér og indsæt et link fra din foretrukne opskrifts hjemmeside",
"view-scraped-data": "Vis skrabet data", "view-scraped-data": "Vis dataudtræk",
"trim-whitespace-description": "Fjern indledende og efterfølgende mellemrum samt blanke linjer", "trim-whitespace-description": "Fjern indledende og efterfølgende mellemrum samt blanke linjer",
"trim-prefix-description": "Beskær første tegn fra hver linje", "trim-prefix-description": "Beskær første tegn fra hver linje",
"split-by-numbered-line-description": "Forsøger at opdele et afsnit ved at matche '1)' eller '1.' mønstre", "split-by-numbered-line-description": "Forsøger at opdele et afsnit ved at matche '1)' eller '1.' mønstre",
@ -449,10 +449,10 @@
"all-recipes": "Alle Opskrifter", "all-recipes": "Alle Opskrifter",
"new-page-created": "Ny side blev oprettet", "new-page-created": "Ny side blev oprettet",
"page": "Side", "page": "Side",
"page-creation-failed": "Oprettelse af side fejlede", "page-creation-failed": "Sideoprettelse fejlede",
"page-deleted": "Side slettet", "page-deleted": "Side slettet",
"page-deletion-failed": "Sletning af side fejlede", "page-deletion-failed": "Sletning af side fejlede",
"page-update-failed": "Opdatering af side fejlede", "page-update-failed": "Sideopdatering fejlede",
"page-updated": "Side opdateret", "page-updated": "Side opdateret",
"pages-update-failed": "Opdatering af sider fejlede", "pages-update-failed": "Opdatering af sider fejlede",
"pages-updated": "Sider opdateret", "pages-updated": "Sider opdateret",
@ -476,7 +476,7 @@
"description": "Beskrivelse", "description": "Beskrivelse",
"disable-amount": "Slå ingrediensmængder fra", "disable-amount": "Slå ingrediensmængder fra",
"disable-comments": "Slå kommentarer fra", "disable-comments": "Slå kommentarer fra",
"duplicate": "Duplikér opskrift", "duplicate": "Kopier opskrift",
"duplicate-name": "Navngiv opskrift", "duplicate-name": "Navngiv opskrift",
"edit-scale": "Rediger skalering", "edit-scale": "Rediger skalering",
"fat-content": "Fedt", "fat-content": "Fedt",
@ -511,17 +511,17 @@
"recipe-name": "Opskriftens navn", "recipe-name": "Opskriftens navn",
"recipe-settings": "Opskriftsindstillinger", "recipe-settings": "Opskriftsindstillinger",
"recipe-update-failed": "Opdatering af opskrift fejlede", "recipe-update-failed": "Opdatering af opskrift fejlede",
"recipe-updated": "Opskrift opdateret", "recipe-updated": "Senest opdateret",
"remove-from-favorites": "Fjern fra favoritter", "remove-from-favorites": "Fjern fra favoritter",
"remove-section": "Fjern sektion", "remove-section": "Fjern sektion",
"saturated-fat-content": "Mættet fedt", "saturated-fat-content": "Mættet fedt",
"save-recipe-before-use": "Gem opskrift før brug", "save-recipe-before-use": "Gem opskrift før brug",
"section-title": "Sektionstitel", "section-title": "Sektionstitel",
"servings": "Portioner", "servings": "Portioner",
"serves-amount": "Serves {amount}", "serves-amount": "{amount} portioner",
"share-recipe-message": "Jeg vil gerne dele min opskrift \"{0}\" med dig.", "share-recipe-message": "Jeg vil gerne dele min opskrift \"{0}\" med dig.",
"show-nutrition-values": "Vis ernæringstabel", "show-nutrition-values": "Vis ernæringstabel",
"sodium-content": "Natrium", "sodium-content": "Salt",
"step-index": "Trin: {step}", "step-index": "Trin: {step}",
"sugar-content": "Sukker", "sugar-content": "Sukker",
"title": "Titel", "title": "Titel",
@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Kunne ikke tilføje opskrift til madplanen", "failed-to-add-recipe-to-mealplan": "Kunne ikke tilføje opskrift til madplanen",
"failed-to-add-to-list": "Kunne ikke tilføje opskrift til listen", "failed-to-add-to-list": "Kunne ikke tilføje opskrift til listen",
"yield": "Portioner", "yield": "Portioner",
"yields-amount-with-text": "Yields {amount} {text}", "yields-amount-with-text": "{amount} {text}",
"yield-text": "Yield Text", "yield-text": "Portionsenhed (eks. pers./stk.)",
"quantity": "Antal", "quantity": "Antal",
"choose-unit": "Vælg enhed", "choose-unit": "Vælg enhed",
"press-enter-to-create": "Tryk enter for at oprette", "press-enter-to-create": "Tryk enter for at oprette",
@ -557,7 +557,7 @@
"toggle-section": "Sektion", "toggle-section": "Sektion",
"see-original-text": "Vis den oprindelige tekst", "see-original-text": "Vis den oprindelige tekst",
"original-text-with-value": "Oprindelig tekst: {originalText}", "original-text-with-value": "Oprindelig tekst: {originalText}",
"ingredient-linker": "Ingrediens-Linker", "ingredient-linker": "Ingrediens-linker",
"linked-to-other-step": "Linket til andet trin", "linked-to-other-step": "Linket til andet trin",
"auto": "Automatisk", "auto": "Automatisk",
"cook-mode": "Tilberedningsvisning", "cook-mode": "Tilberedningsvisning",
@ -579,7 +579,6 @@
"made-this": "Jeg har lavet denne", "made-this": "Jeg har lavet denne",
"how-did-it-turn-out": "Hvordan blev det?", "how-did-it-turn-out": "Hvordan blev det?",
"user-made-this": "{user} lavede denne", "user-made-this": "{user} lavede denne",
"last-made-date": "Sidst tilberedt den {date}",
"api-extras-description": "Opskrifter ekstra er en central feature i Mealie API. De giver dig mulighed for at oprette brugerdefinerede JSON nøgle / værdi par inden for en opskrift, at henvise til fra 3. parts applikationer. Du kan bruge disse nøgler til at give oplysninger, for eksempel til at udløse automatiseringer eller brugerdefinerede beskeder til at videresende til din ønskede enhed.", "api-extras-description": "Opskrifter ekstra er en central feature i Mealie API. De giver dig mulighed for at oprette brugerdefinerede JSON nøgle / værdi par inden for en opskrift, at henvise til fra 3. parts applikationer. Du kan bruge disse nøgler til at give oplysninger, for eksempel til at udløse automatiseringer eller brugerdefinerede beskeder til at videresende til din ønskede enhed.",
"message-key": "Beskednøgle", "message-key": "Beskednøgle",
"parse": "Behandl data", "parse": "Behandl data",
@ -588,7 +587,7 @@
"enable-ingredient-amounts-to-use-this-feature": "Aktiver mængde af ingredienser for at bruge denne funktion", "enable-ingredient-amounts-to-use-this-feature": "Aktiver mængde af ingredienser for at bruge denne funktion",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Opskrifter med enheder eller fødevarer defineret kan ikke fortolkes.", "recipes-with-units-or-foods-defined-cannot-be-parsed": "Opskrifter med enheder eller fødevarer defineret kan ikke fortolkes.",
"parse-ingredients": "Fortolk ingredienser", "parse-ingredients": "Fortolk ingredienser",
"edit-markdown": "Rediger Markdown", "edit-markdown": "Rediger markdown",
"recipe-creation": "Opret opskrift", "recipe-creation": "Opret opskrift",
"select-one-of-the-various-ways-to-create-a-recipe": "Vælg én af følgende måder at oprette en opskrift på", "select-one-of-the-various-ways-to-create-a-recipe": "Vælg én af følgende måder at oprette en opskrift på",
"looking-for-migrations": "Kigger du efter data migrering?", "looking-for-migrations": "Kigger du efter data migrering?",
@ -604,13 +603,13 @@
"should-translate-description": "Oversæt opskriften til mit sprog", "should-translate-description": "Oversæt opskriften til mit sprog",
"please-wait-image-procesing": "Vent venligst, billedet behandles. Dette kan tage lidt tid.", "please-wait-image-procesing": "Vent venligst, billedet behandles. Dette kan tage lidt tid.",
"bulk-url-import": "Import fra flere URL-adresser", "bulk-url-import": "Import fra flere URL-adresser",
"debug-scraper": "Fejlsøg Scraper", "debug-scraper": "Fejlsøg indlæser",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opret en opskrift ved at angive navnet. Alle opskrifter skal have unikke navne.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opret en opskrift ved at angive navnet. Alle opskrifter skal have unikke navne.",
"new-recipe-names-must-be-unique": "Opskriftsnavnet er allerede i brug", "new-recipe-names-must-be-unique": "Opskriftsnavnet er allerede i brug",
"scrape-recipe": "Scrape Opskrift", "scrape-recipe": "Hent opskrift",
"scrape-recipe-description": "Hent en opskrift fra en hjemmeside. Angiv URL'en til den hjemmeside, du vil hente data fra, og Mealie vil forsøge at hente opskriften og tilføje den til din samling.", "scrape-recipe-description": "Hent en opskrift fra en hjemmeside. Angiv URL'en til den hjemmeside, du vil hente data fra og Mealie vil forsøge at hente opskriften, samt tilføje den til din samling.",
"scrape-recipe-have-a-lot-of-recipes": "Har du en masse opskrifter, du ønsker at scrappe på en gang?", "scrape-recipe-have-a-lot-of-recipes": "Har du en masse opskrifter, du ønsker at hente på én gang?",
"scrape-recipe-suggest-bulk-importer": "Prøv masse import", "scrape-recipe-suggest-bulk-importer": "Prøv masseimport",
"scrape-recipe-have-raw-html-or-json-data": "Har rå HTML- eller JSON-data?", "scrape-recipe-have-raw-html-or-json-data": "Har rå HTML- eller JSON-data?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere direkte fra rå data", "scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere direkte fra rå data",
"import-original-keywords-as-tags": "Importér originale nøgleord som mærker", "import-original-keywords-as-tags": "Importér originale nøgleord som mærker",
@ -637,9 +636,9 @@
"recipe-debugger-use-openai-description": "Brug OpenAI til at fortolke resultaterne i stedet for at stole på scraper biblioteket. Når du opretter en opskrift via URL, gøres dette automatisk, hvis skraberbiblioteket fejler, men du kan teste det manuelt her.", "recipe-debugger-use-openai-description": "Brug OpenAI til at fortolke resultaterne i stedet for at stole på scraper biblioteket. Når du opretter en opskrift via URL, gøres dette automatisk, hvis skraberbiblioteket fejler, men du kan teste det manuelt her.",
"debug": "Fejlsøgning", "debug": "Fejlsøgning",
"tree-view": "Træ visning", "tree-view": "Træ visning",
"recipe-servings": "Recipe Servings", "recipe-servings": "Opskrift Servinger",
"recipe-yield": "Udbytte af opskrift", "recipe-yield": "Udbytte af opskrift",
"recipe-yield-text": "Recipe Yield Text", "recipe-yield-text": "Portioner",
"unit": "Enhed", "unit": "Enhed",
"upload-image": "Upload billede", "upload-image": "Upload billede",
"screen-awake": "Hold skærmen tændt", "screen-awake": "Hold skærmen tændt",
@ -647,11 +646,10 @@
"nextStep": "Næste trin", "nextStep": "Næste trin",
"recipe-actions": "Opskriftshandlinger", "recipe-actions": "Opskriftshandlinger",
"parser": { "parser": {
"experimental-alert-text": "Mealie bruger natural language processing til at behandle og oprette relevante måleenheder og fødrerevarer som ingredienser i dine opskrifter. Denne funktion er eksperimentel og fungerer måske ikke altid som forventet. Hvis du foretrækker ikke at bruge de fortolkede resultater, kan du vælge 'Annullér' og dine ændringer vil ikke blive gemt.", "ingredient-parser": "Ingrediensfortolker",
"ingredient-parser": "Ingrediens- Parser", "explanation": "For at bruge ingrediensfortolkeren, skal du klikke på knappen 'Fortolk alt' for at starte behandlingen. Når relevante ingredienser er identificeret, kan du gennemgå dem og kontrollere, at de blev korrekt identificeret. Modellens konfidensscore vises til højre for ingrediensens titel. Denne score er et gennemsnit af alle de enkelte scorer og er måske ikke altid helt præcis.",
"explanation": "For at bruge ingrediensparseren, skal du klikke på knappen 'Parse Alle' for at starte behandlingen. Når relevante ingredienser er identificeret, kan du gennemgå sem og kontrollere, at de blev korrekt identificeret. Modellens konfidensscore vises til højre for ingrediensens titel. Denne score er et gennemsnit af alle de enkelte scorer og er måske ikke altid helt præcis.",
"alerts-explainer": "En advarsel vil blive vist, hvis en identificeret fødevare eller måleenhed ikke findes i databasen.", "alerts-explainer": "En advarsel vil blive vist, hvis en identificeret fødevare eller måleenhed ikke findes i databasen.",
"select-parser": "Vælg Parser", "select-parser": "Vælg fortolker",
"natural-language-processor": "Natural Language Processor", "natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser", "brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser", "openai-parser": "OpenAI Parser",
@ -662,11 +660,11 @@
"no-food": "Ingen fødevarer" "no-food": "Ingen fødevarer"
}, },
"reset-servings-count": "Nulstil antal serveringer", "reset-servings-count": "Nulstil antal serveringer",
"not-linked-ingredients": "Additional Ingredients" "not-linked-ingredients": "Yderligere ingredienser"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Opskrift Finder", "recipe-finder": "Opskriftssøger",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.", "recipe-finder-description": "Søg efter opskrifter pba. ingredienser du har ved hånden. Du kan også søge ud fra tilgængelige redskaber og sætte et maksimum antal manglende ingredienser og/eller redskaber.",
"selected-ingredients": "Valgte Ingredienser", "selected-ingredients": "Valgte Ingredienser",
"no-ingredients-selected": "Ingen ingredienser valgt", "no-ingredients-selected": "Ingen ingredienser valgt",
"missing": "Mangler", "missing": "Mangler",
@ -675,8 +673,8 @@
"include-ingredients-on-hand": "Inkluder ingredienser du allerede har", "include-ingredients-on-hand": "Inkluder ingredienser du allerede har",
"include-tools-on-hand": "Inkluder værktøjer du allerede har", "include-tools-on-hand": "Inkluder værktøjer du allerede har",
"max-missing-ingredients": "Maksimum Manglende Ingredienser", "max-missing-ingredients": "Maksimum Manglende Ingredienser",
"max-missing-tools": "Max Missing Tools", "max-missing-tools": "Maks. manglende redskaber",
"selected-tools": "Selected Tools", "selected-tools": "Valgte redskaber",
"other-filters": "Andre filtre", "other-filters": "Andre filtre",
"ready-to-make": "Klar til at lave", "ready-to-make": "Klar til at lave",
"almost-ready-to-make": "Næsten klar til at lave" "almost-ready-to-make": "Næsten klar til at lave"
@ -695,7 +693,7 @@
"search": "Søg", "search": "Søg",
"search-mealie": "Søg Mealie (tryk /)", "search-mealie": "Søg Mealie (tryk /)",
"search-placeholder": "Søg...", "search-placeholder": "Søg...",
"tag-filter": "Tagfiler", "tag-filter": "Tagfilter",
"search-hint": "Tryk '/'", "search-hint": "Tryk '/'",
"advanced": "Avanceret", "advanced": "Avanceret",
"auto-search": "Automatisk søgning", "auto-search": "Automatisk søgning",
@ -715,15 +713,15 @@
"delete-backup": "Slet backup", "delete-backup": "Slet backup",
"error-creating-backup-see-log-file": "Der opstod en fejl under oprettelse af backuppen. Se log-filen", "error-creating-backup-see-log-file": "Der opstod en fejl under oprettelse af backuppen. Se log-filen",
"full-backup": "Fuld backup", "full-backup": "Fuld backup",
"import-summary": "Importer resumé", "import-summary": "Importresumé",
"partial-backup": "Delvis backup", "partial-backup": "Delvis backup",
"unable-to-delete-backup": "Ude af stand til at slette backup.", "unable-to-delete-backup": "Ude af stand til at slette backup.",
"experimental-description": "Backups er samlede snapshots af databasen og datamappe på installationen. Dette omfatter alle data og kan ikke indstilles til at udelukke undergrupper af data. Du kan tænke på dette som et øjebliksbillede af Mealie på et bestemt tidspunkt. Disse fungerer som en database agnostisk måde at eksportere og importere data, eller sikkerhedskopiere installationen til en ekstern placering.", "experimental-description": "Backups er samlede snapshots af databasen og datamappe på installationen. Dette omfatter alle data og kan ikke indstilles til at udelukke undergrupper af data. Du kan tænke på dette som et øjebliksbillede af Mealie på et bestemt tidspunkt. Disse fungerer som en database agnostisk måde at eksportere og importere data, eller sikkerhedskopiere installationen til en ekstern placering.",
"backup-restore": "Backup / gendannelse", "backup-restore": "Backup / gendannelse",
"back-restore-description": "Gendannelse af denne sikkerhedskopi vil overskrive alle de aktuelle data i din database og i datamappen og erstatte dem med indholdet af denne sikkerhedskopi. {cannot-be-undone} Hvis gendannelsen lykkes, vil du blive logget ud.", "back-restore-description": "Gendannelse af denne sikkerhedskopi vil overskrive alle de aktuelle data i din database og i datamappen og erstatte dem med indholdet af denne sikkerhedskopi. {cannot-be-undone} Hvis gendannelsen lykkes, vil du blive logget ud.",
"cannot-be-undone": "Denne handling kan ikke fortrydes - brug med forsigtighed.", "cannot-be-undone": "Denne handling kan ikke fortrydes - brug med forsigtighed.",
"postgresql-note": "Hvis du bruger PostGreSQL, så gennemse venligst {backup-restore-process} før du gendanner.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore proces i dokumentationen", "backup-restore-process-in-the-documentation": "backup/restoreproces i dokumentationen",
"irreversible-acknowledgment": "Jeg forstår, at denne handling er irreversibel, destruktiv og kan forårsage tab af data", "irreversible-acknowledgment": "Jeg forstår, at denne handling er irreversibel, destruktiv og kan forårsage tab af data",
"restore-backup": "Gendan sikkerhedskopi" "restore-backup": "Gendan sikkerhedskopi"
}, },
@ -743,10 +741,10 @@
"show-recent": "Vis seneste opskrifter" "show-recent": "Vis seneste opskrifter"
}, },
"language": "Sprog", "language": "Sprog",
"latest": "Seneste:", "latest": "Seneste",
"local-api": "Lokal API", "local-api": "Lokal API",
"locale-settings": "Lokale indstillinger", "locale-settings": "Lokale indstillinger",
"migrations": "Migrationer", "migrations": "Migreringer",
"new-page": "Ny side", "new-page": "Ny side",
"notify": "Notifikationer", "notify": "Notifikationer",
"organize": "Organiser", "organize": "Organiser",
@ -805,12 +803,12 @@
}, },
"webhooks": { "webhooks": {
"test-webhooks": "Test Webhooks", "test-webhooks": "Test Webhooks",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "Webadresserne, der er anført nedenfor, modtager webhooks, der indeholder opskriftsdataene for måltidsplanen på den planlagte dag. \nWebhooks udføres i øjeblikket på <strong> {time} </strong>", "the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "Webadresserne, der er anført nedenfor, modtager webhooks, der indeholder opskriftsdataene for måltidsplanen på den planlagte dag. \nWebhooks udføres i øjeblikket på ",
"webhook-url": "Webhook adresse", "webhook-url": "Webhook URL",
"webhooks-caps": "WEBHOOKS", "webhooks-caps": "WEBHOOKS",
"webhooks": "Webhooks", "webhooks": "Webhooks",
"webhook-name": "Webhook navn", "webhook-name": "Webhooknavn",
"description": "Nedenstående webhooks vil blive afvikler, når et måltid er angivet for dagen. På det planlagte tidspunkt, afvikles webhooks med data fra den opskrift, der er planlagt til dagen. Bemærk, at webhook ikke afvikles nøjagtig på det planlagte tidspunkt. Webhooks afvikles med 5 minutters intervalerl, så webhooks vil blive udført inden for 5 +/- minutter fra den planlagte tid." "description": "Nedenstående webhooks vil blive afvikler, når et måltid er angivet for dagen. På det planlagte tidspunkt, afvikles webhooks med data fra den opskrift, der er planlagt til dagen. Bemærk, at webhook ikke afvikles nøjagtig på det planlagte tidspunkt. Webhooks afvikles med 5 minutters intervaler, så webhooks vil blive udført inden for 5 +/- minutter fra den planlagte tid."
}, },
"bug-report": "Fejlrapport", "bug-report": "Fejlrapport",
"bug-report-information": "Brug denne information til at rapportere en fejl. At give detaljer om din instans til udviklere er den bedste måde at få dine problemer løst hurtigt.", "bug-report-information": "Brug denne information til at rapportere en fejl. At give detaljer om din instans til udviklere er den bedste måde at få dine problemer løst hurtigt.",
@ -843,11 +841,11 @@
"ldap-ready-error-text": "Ikke alle LDAP- værdier er konfigureret. Dette kan ignoreres, hvis du ikke bruger LDAP- godkendelse.", "ldap-ready-error-text": "Ikke alle LDAP- værdier er konfigureret. Dette kan ignoreres, hvis du ikke bruger LDAP- godkendelse.",
"ldap-ready-success-text": "Påkrævede LDAP-variabler er alle angivet.", "ldap-ready-success-text": "Påkrævede LDAP-variabler er alle angivet.",
"build": "Build", "build": "Build",
"recipe-scraper-version": "Version på opskrift-indsamler", "recipe-scraper-version": "Version på opskriftsfortolker",
"oidc-ready": "OIDC er Klar", "oidc-ready": "OIDC er klar",
"oidc-ready-error-text": "Ikke alle OIDC værdier er konfigureret. Dette kan ignoreres, hvis du ikke bruger OIDC godkendelse.", "oidc-ready-error-text": "Ikke alle OIDC værdier er konfigureret. Dette kan ignoreres, hvis du ikke bruger OIDC godkendelse.",
"oidc-ready-success-text": "Alle påkrævede OIDC værdier er angivet.", "oidc-ready-success-text": "Alle påkrævede OIDC værdier er angivet.",
"openai-ready": "OpenAI Klar", "openai-ready": "OpenAI klar",
"openai-ready-error-text": "Ikke alle OpenAI værdier er konfigureret. Dette kan ignoreres, hvis du ikke bruger OpenAI funktioner.", "openai-ready-error-text": "Ikke alle OpenAI værdier er konfigureret. Dette kan ignoreres, hvis du ikke bruger OpenAI funktioner.",
"openai-ready-success-text": "Påkrævede OpenAI variabler er alle indstillet." "openai-ready-success-text": "Påkrævede OpenAI variabler er alle indstillet."
}, },
@ -887,11 +885,11 @@
"no-shopping-lists-found": "Ingen Indkøbslister fundet" "no-shopping-lists-found": "Ingen Indkøbslister fundet"
}, },
"sidebar": { "sidebar": {
"all-recipes": "Alle opskr.", "all-recipes": "Alle opskrifter",
"backups": "Sikkerhedskopier", "backups": "Sikkerhedskopier",
"categories": "Kategorier", "categories": "Kategorier",
"cookbooks": "Kogebøger", "cookbooks": "Kogebøger",
"dashboard": "Instrumentbræt", "dashboard": "Overblik",
"home-page": "Forside", "home-page": "Forside",
"manage-users": "Adm. brugere", "manage-users": "Adm. brugere",
"migrations": "Migrationer", "migrations": "Migrationer",
@ -932,23 +930,23 @@
"tag": "Mærker" "tag": "Mærker"
}, },
"tool": { "tool": {
"tools": "Værktøjer", "tools": "Redskaber",
"on-hand": "Har Allerede", "on-hand": "Har allerede",
"create-a-tool": "Opret et værktøj", "create-a-tool": "Tilføj redskab",
"tool-name": "Værktøjsnavn", "tool-name": "Redskab",
"create-new-tool": "Opret et nyt værktøj", "create-new-tool": "Opret redskab",
"on-hand-checkbox-label": "Vis som \"Har allerede\" (afkrydset)", "on-hand-checkbox-label": "Vis som \"Har allerede\" (afkrydset)",
"required-tools": "Nødvendige Værktøjer", "required-tools": "Nødvendige redskaber",
"tool": "Værktøj" "tool": "Redskab"
}, },
"user": { "user": {
"admin": "Administrator", "admin": "Administrator",
"are-you-sure-you-want-to-delete-the-link": "Er du sikker på, at du vil slette linket \"<b>{link}<b/>\"?", "are-you-sure-you-want-to-delete-the-link": "Er du sikker på, at du vil slette linket \"<b>{link}<b/>\"?",
"are-you-sure-you-want-to-delete-the-user": "Er du sikker på, at du vil slette brugeren <b>{activeName} med ID: {activeId}<b/>?", "are-you-sure-you-want-to-delete-the-user": "Er du sikker på, at du vil slette brugeren <b>{activeName} med ID: {activeId}<b/>?",
"auth-method": "Auth Metode", "auth-method": "Godkendelsesmetode",
"confirm-link-deletion": "Bekræft sletning af link", "confirm-link-deletion": "Bekræft sletning af link",
"confirm-password": "Bekræft adgangskode", "confirm-password": "Bekræft adgangskode",
"confirm-user-deletion": "Bekræft Sletning Af Bruger", "confirm-user-deletion": "Bekræft brugersletning",
"could-not-validate-credentials": "Kunne verificere legitimationsoplysninger", "could-not-validate-credentials": "Kunne verificere legitimationsoplysninger",
"create-link": "Link blev oprettet", "create-link": "Link blev oprettet",
"create-user": "Opret bruger", "create-user": "Opret bruger",
@ -981,7 +979,7 @@
"register": "Registrér", "register": "Registrér",
"reset-password": "Nulstil adgangskoden", "reset-password": "Nulstil adgangskoden",
"sign-in": "Log ind", "sign-in": "Log ind",
"total-mealplans": "Antal Madplaner", "total-mealplans": "Antal madplaner",
"total-users": "Antal brugere", "total-users": "Antal brugere",
"upload-photo": "Upload billede", "upload-photo": "Upload billede",
"use-8-characters-or-more-for-your-password": "Adgangskode skal indeholde 8 tegn eller flere", "use-8-characters-or-more-for-your-password": "Adgangskode skal indeholde 8 tegn eller flere",
@ -999,8 +997,8 @@
"users-header": "BRUGERE", "users-header": "BRUGERE",
"users": "Brugere", "users": "Brugere",
"user-not-found": "Brugeren kunne ikke findes", "user-not-found": "Brugeren kunne ikke findes",
"webhook-time": "Webhook Tid", "webhook-time": "Webhook tid",
"webhooks-enabled": "Webhooks Aktiveret", "webhooks-enabled": "Webhooks aktiveret",
"you-are-not-allowed-to-create-a-user": "Du har ikke rettigheder til at oprette en ny bruger", "you-are-not-allowed-to-create-a-user": "Du har ikke rettigheder til at oprette en ny bruger",
"you-are-not-allowed-to-delete-this-user": "Du har ikke rettigheder til at slette denne bruger", "you-are-not-allowed-to-delete-this-user": "Du har ikke rettigheder til at slette denne bruger",
"enable-advanced-content": "Tillad avanceret indhold", "enable-advanced-content": "Tillad avanceret indhold",
@ -1019,7 +1017,7 @@
"very-strong": "Meget stærk" "very-strong": "Meget stærk"
}, },
"user-management": "Brugeradministration", "user-management": "Brugeradministration",
"reset-locked-users": "Nulstil Låste Brugere", "reset-locked-users": "Nulstil låste brugere",
"admin-user-creation": "Opret administratorbruger", "admin-user-creation": "Opret administratorbruger",
"admin-user-management": "Håndter administratorbruger", "admin-user-management": "Håndter administratorbruger",
"user-details": "Brugerdetaljer", "user-details": "Brugerdetaljer",
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Ved at kombinere de udvalgte fødevarer vil de to valgte fødevarer blive til en enkelt fødevare. Kildefødevaren vil blive slettet, og alle henvisninger til kildefødevaren vil blive opdateret til at pege på målfødevaren.", "merge-dialog-text": "Ved at kombinere de udvalgte fødevarer vil de to valgte fødevarer blive til en enkelt fødevare. Kildefødevaren vil blive slettet, og alle henvisninger til kildefødevaren vil blive opdateret til at pege på målfødevaren.",
"merge-food-example": "Samler {food1} med {food2}", "merge-food-example": "Samler {food1} med {food2}",
"seed-dialog-text": "Opret fødevarer i dit sprog. Dette vil oprette 200 + almindelige fødevarer, der kan bruges til i dine opskrifter. Fødevarer er oversat via en fællesskabsindsats.", "seed-dialog-text": "Tilføj standard fødevarer på dansk i databasen. Dette vil oprette mere en 200 af de mest anvendte fødevarer, der kan bruges til at organisere din database. Fødevarer er oversat via en fællesskabsindsats.",
"seed-dialog-warning": "Du har allerede nogle elementer i din database. Denne handling vil ikke samle dubletter, så du må håndtere dem manuelt efterfølgende.", "seed-dialog-warning": "Du har allerede nogle elementer i din database. Denne handling vil ikke undgå dubletter, så du må håndtere dem manuelt efterfølgende.",
"combine-food": "Kombiner fødevarer", "combine-food": "Kombiner fødevarer",
"source-food": "Kilde for fødevarer", "source-food": "Kilde for fødevarer",
"target-food": "Mål for fødevarer", "target-food": "Mål for fødevarer",
@ -1065,7 +1063,7 @@
"on-hand-checkbox-label": "Ændring af dette flag ændrer markeringen, så denne fødevare ikke er markeret som standard, når du tilføjer en opskrift til en indkøbsliste." "on-hand-checkbox-label": "Ændring af dette flag ændrer markeringen, så denne fødevare ikke er markeret som standard, når du tilføjer en opskrift til en indkøbsliste."
}, },
"units": { "units": {
"seed-dialog-text": "Opret standard enheder i dit sprog.", "seed-dialog-text": "Opret standardenheder i dit sprog.",
"combine-unit-description": "Ved at kombinere de udvalgte enheder vil de to valgte enheder blive til en enkelt enhed. {source-unit-will-be-deleted} vil blive slettet, og alle henvisninger til denne vil blive opdateret til at pege på den anden enhed.", "combine-unit-description": "Ved at kombinere de udvalgte enheder vil de to valgte enheder blive til en enkelt enhed. {source-unit-will-be-deleted} vil blive slettet, og alle henvisninger til denne vil blive opdateret til at pege på den anden enhed.",
"combine-unit": "Kombiner enheder", "combine-unit": "Kombiner enheder",
"source-unit": "Kildeenhed", "source-unit": "Kildeenhed",
@ -1094,7 +1092,7 @@
"assign-label": "Tildel etiket" "assign-label": "Tildel etiket"
}, },
"recipes": { "recipes": {
"purge-exports": "Tøm Eksport", "purge-exports": "Slet eksporter",
"are-you-sure-you-want-to-delete-all-export-data": "Er du sikker på, at du vil slette alle eksportdata?", "are-you-sure-you-want-to-delete-all-export-data": "Er du sikker på, at du vil slette alle eksportdata?",
"confirm-delete-recipes": "Er du sikker på, at du vil slette følgende opskrifter? Denne handling kan ikke fortrydes.", "confirm-delete-recipes": "Er du sikker på, at du vil slette følgende opskrifter? Denne handling kan ikke fortrydes.",
"the-following-recipes-selected-length-will-be-exported": "Følgende opskrifter ({0}) vil blive eksporteret.", "the-following-recipes-selected-length-will-be-exported": "Følgende opskrifter ({0}) vil blive eksporteret.",
@ -1104,26 +1102,26 @@
"recipe-data-description": "Her kan du administrere data for dine opskrifter. Du kan udføre flere samtidige handlinger for dine opskrifter, herunder eksportere, slette, tagge og tildele kategorier.", "recipe-data-description": "Her kan du administrere data for dine opskrifter. Du kan udføre flere samtidige handlinger for dine opskrifter, herunder eksportere, slette, tagge og tildele kategorier.",
"recipe-columns": "Opskriftskolonner", "recipe-columns": "Opskriftskolonner",
"data-exports-description": "Her finder du links til tilgængelige eksporter, der er klar til download. Eksporterede data udløber, så sørg for at hente dem, mens de stadig er tilgængelige.", "data-exports-description": "Her finder du links til tilgængelige eksporter, der er klar til download. Eksporterede data udløber, så sørg for at hente dem, mens de stadig er tilgængelige.",
"data-exports": "Eksport af Data", "data-exports": "Eksport af data",
"tag": "Mærker", "tag": "Mærker",
"categorize": "Kategorisér", "categorize": "Kategorisér",
"update-settings": "Opdatér indstillinger", "update-settings": "Opdatér indstillinger",
"tag-recipes": "Tilføj mærker til opskrifter", "tag-recipes": "Tilføj mærker til opskrifter",
"categorize-recipes": "Kategorisér Opskrifter", "categorize-recipes": "Kategorisér opskrifter",
"export-recipes": "Eksportér Opskrifter", "export-recipes": "Eksportér opskrifter",
"delete-recipes": "Slet Opskrifter", "delete-recipes": "Slet opskrifter",
"source-unit-will-be-deleted": "Kildeenhed vil blive slettet" "source-unit-will-be-deleted": "Kildeenhed vil blive slettet"
}, },
"recipe-actions": { "recipe-actions": {
"recipe-actions-data": "Data for Opskriftshandlinger", "recipe-actions-data": "Opskriftshandlinger",
"new-recipe-action": "Ny Opskriftshandling", "new-recipe-action": "Ny opskriftshandling",
"edit-recipe-action": "Rediger Opskriftshandling", "edit-recipe-action": "Rediger opskriftshandling",
"action-type": "Handlingstype" "action-type": "Handlingstype"
}, },
"create-alias": "Opret alias", "create-alias": "Opret alias",
"manage-aliases": "Administrer Aliaser", "manage-aliases": "Administrer aliaser",
"seed-data": "Opret standard data", "seed-data": "Opret standarddata",
"seed": "Frø", "seed": "Kildedata",
"data-management": "Datastyring", "data-management": "Datastyring",
"data-management-description": "Vælg hvilket datasæt du ønsker at foretage ændringer til.", "data-management-description": "Vælg hvilket datasæt du ønsker at foretage ændringer til.",
"select-data": "vælg data", "select-data": "vælg data",
@ -1136,14 +1134,14 @@
"category-data": "Kategoridata" "category-data": "Kategoridata"
}, },
"tags": { "tags": {
"new-tag": "Nyt mærke", "new-tag": "Nyt tag",
"edit-tag": "Rediger Mærke", "edit-tag": "Rediger tag",
"tag-data": "Mærke data" "tag-data": "Tagoplysninger"
}, },
"tools": { "tools": {
"new-tool": "Nyt Værktøj", "new-tool": "Nyt redskab",
"edit-tool": "Redigér værktøjer", "edit-tool": "Redigér redskaber",
"tool-data": "Værktøjs Data" "tool-data": "Redskabsoplysninger"
} }
}, },
"user-registration": { "user-registration": {
@ -1173,7 +1171,7 @@
"recipe-share": { "recipe-share": {
"expiration-date": "Udløbsdato", "expiration-date": "Udløbsdato",
"share-recipe": "Del opskrift", "share-recipe": "Del opskrift",
"default-30-days": "Standard 30 Dage", "default-30-days": "Standard 30 dage",
"expires-at": "Udløber den", "expires-at": "Udløber den",
"recipe-link-copied-message": "Link til opskrift er kopieret til udklipsholder" "recipe-link-copied-message": "Link til opskrift er kopieret til udklipsholder"
}, },
@ -1194,12 +1192,12 @@
"demo_password": "Adgangskode: {password}" "demo_password": "Adgangskode: {password}"
}, },
"ocr-editor": { "ocr-editor": {
"ocr-editor": "Ocr redigering", "ocr-editor": "OCR redigering",
"toolbar": "Værktøjslinje", "toolbar": "Værktøjslinje",
"selection-mode": "Markeringstilstand", "selection-mode": "Markeringstilstand",
"pan-and-zoom-picture": "Panorer og zoom på billede", "pan-and-zoom-picture": "Panorer og zoom på billede",
"split-text": "Opdel tekst", "split-text": "Opdel tekst",
"preserve-line-breaks": "Bevar original linjeskift", "preserve-line-breaks": "Bevar oprindelige linjeskift",
"split-by-block": "Opdelt efter tekstblok", "split-by-block": "Opdelt efter tekstblok",
"flatten": "Udjævn på trods af original formatering", "flatten": "Udjævn på trods af original formatering",
"help": { "help": {
@ -1212,7 +1210,7 @@
"click": "Klik på et felt til højre og klik derefter tilbage på rektanglet over billedet.", "click": "Klik på et felt til højre og klik derefter tilbage på rektanglet over billedet.",
"result": "Den valgte tekst vises i det tidligere markerede felt." "result": "Den valgte tekst vises i det tidligere markerede felt."
}, },
"pan-and-zoom-mode": "Panorerings- og zoom-tilstand", "pan-and-zoom-mode": "Panorerings- og zoomtilstand",
"pan-and-zoom-desc": "Vælg panorering og zoom ved at klikke på ikonet. Denne tilstand gør det lettere at zoome og flytte rundt på billedet, ved brug af store billeder.", "pan-and-zoom-desc": "Vælg panorering og zoom ved at klikke på ikonet. Denne tilstand gør det lettere at zoome og flytte rundt på billedet, ved brug af store billeder.",
"split-text-mode": "Opdelt teksttilstand", "split-text-mode": "Opdelt teksttilstand",
"split-modes": { "split-modes": {
@ -1230,7 +1228,7 @@
"storage-details": "Lageroplysninger", "storage-details": "Lageroplysninger",
"page-title": "Vedligeholdelse af webside", "page-title": "Vedligeholdelse af webside",
"summary-title": "Oversigt", "summary-title": "Oversigt",
"button-label-get-summary": "Hent Oversigt", "button-label-get-summary": "Hent oversigt",
"button-label-open-details": "Detaljer", "button-label-open-details": "Detaljer",
"info-description-data-dir-size": "Størrelse på datamappe", "info-description-data-dir-size": "Størrelse på datamappe",
"info-description-log-file-size": "Størrelse på logfil", "info-description-log-file-size": "Størrelse på logfil",
@ -1245,18 +1243,18 @@
}, },
"action-delete-log-files-name": "Slet logfiler", "action-delete-log-files-name": "Slet logfiler",
"action-delete-log-files-description": "Sletter alle logfiler", "action-delete-log-files-description": "Sletter alle logfiler",
"action-clean-directories-name": "Rens Mapper", "action-clean-directories-name": "Rens mapper",
"action-clean-directories-description": "Fjerner alle opskriftsmapper, der ikke er gyldige UUID'er", "action-clean-directories-description": "Fjerner alle opskriftsmapper, der ikke er gyldige UUID'er",
"action-clean-temporary-files-name": "Slet midlertidige filer", "action-clean-temporary-files-name": "Slet midlertidige filer",
"action-clean-temporary-files-description": "Fjerner alle filer og mapper i .temp mappen", "action-clean-temporary-files-description": "Fjerner alle filer og mapper i .temp mappen",
"action-clean-images-name": "Rens Billeder", "action-clean-images-name": "Rens billeder",
"action-clean-images-description": "Fjerner alle de billeder, der ikke slutter med .webp", "action-clean-images-description": "Fjerner alle de billeder, der ikke slutter med .webp",
"actions-description": "Vedligeholdelseshandlinger er {destructive_in_bold} og bør bruges med forsigtighed. Udførelse af alle disse handlinger er {irreversible_in_bold}.", "actions-description": "Vedligeholdelseshandlinger er {destructive_in_bold} og bør bruges med forsigtighed. Udførelse af alle disse handlinger er {irreversible_in_bold}.",
"actions-description-destructive": "destruktive", "actions-description-destructive": "destruktive",
"actions-description-irreversible": "irreversible", "actions-description-irreversible": "irreversible",
"logs-action-refresh": "Opdater logfiler", "logs-action-refresh": "Opdater logfiler",
"logs-page-title": "Mealie logfiler", "logs-page-title": "Mealie logfiler",
"logs-tail-lines-label": "Tail Lines" "logs-tail-lines-label": "Følg log"
}, },
"mainentance": { "mainentance": {
"actions-title": "Handlinger" "actions-title": "Handlinger"
@ -1277,11 +1275,11 @@
"no-logs-found": "Ingen logfiler fundet", "no-logs-found": "Ingen logfiler fundet",
"tasks": "Opgaver", "tasks": "Opgaver",
"setup": { "setup": {
"first-time-setup": "Første Opsætning", "first-time-setup": "Indledende opsætning",
"welcome-to-mealie-get-started": "Velkommen til Mealie! Lad os starte", "welcome-to-mealie-get-started": "Velkommen til Mealie! Lad os starte",
"already-set-up-bring-to-homepage": "Jeg er allerede oprettet, bare bringe mig til hjemmesiden", "already-set-up-bring-to-homepage": "Jeg er allerede oprettet, bare bringe mig til startsiden",
"common-settings-for-new-sites": "Her er nogle almindelige indstillinger for nye sites", "common-settings-for-new-sites": "Her er nogle almindelige indstillinger for nye sites",
"setup-complete": "Opsætning fuldført!", "setup-complete": "Opsætning færdig!",
"here-are-a-few-things-to-help-you-get-started": "Her er et par ting, der kan hjælpe dig i gang med Mealie", "here-are-a-few-things-to-help-you-get-started": "Her er et par ting, der kan hjælpe dig i gang med Mealie",
"restore-from-v1-backup": "Har du en sikkerhedskopi fra en tidligere udgave af Mealie v1? Du kan gendanne den her.", "restore-from-v1-backup": "Har du en sikkerhedskopi fra en tidligere udgave af Mealie v1? Du kan gendanne den her.",
"manage-profile-or-get-invite-link": "Administrer din egen profil, eller tag et invitationslink til at dele med andre." "manage-profile-or-get-invite-link": "Administrer din egen profil, eller tag et invitationslink til at dele med andre."
@ -1316,11 +1314,11 @@
"group-settings": "Gruppeindstillinger", "group-settings": "Gruppeindstillinger",
"group-settings-description": "Administrer dine fælles gruppeindstillinger, såsom privatlivsindstillinger.", "group-settings-description": "Administrer dine fælles gruppeindstillinger, såsom privatlivsindstillinger.",
"household-description": "Disse elementer deles i din husstand. Redigering af en af dem vil ændre det for hele husstanden!", "household-description": "Disse elementer deles i din husstand. Redigering af en af dem vil ændre det for hele husstanden!",
"household-settings": "Husholdnings Indstillinger", "household-settings": "Husholdningsindstillinger",
"household-settings-description": "Administrer dine husstandsindstillinger, såsom madplan og privatlivsindstillinger.", "household-settings-description": "Administrer dine husholdningsindstillinger, såsom madplan og privatlivsindstillinger.",
"cookbooks-description": "Administrer en samling af kategorier og generer sider for dem.", "cookbooks-description": "Administrer en samling af kategorier og opret sider til dem.",
"members": "Medlemmer", "members": "Medlemmer",
"members-description": "Se, hvem der er i din husstand og administrere deres tilladelser.", "members-description": "Se, hvem der er i din husstand og administrer deres tilladelser.",
"webhooks-description": "Opsæt af webhooks, der afvikles på dage, som du har planlagt måltider for.", "webhooks-description": "Opsæt af webhooks, der afvikles på dage, som du har planlagt måltider for.",
"notifiers": "Notifikationer", "notifiers": "Notifikationer",
"notifiers-description": "Opsæt e-mail og push-notifikationer, der udløser på specifikke begivenheder.", "notifiers-description": "Opsæt e-mail og push-notifikationer, der udløser på specifikke begivenheder.",
@ -1334,12 +1332,12 @@
"preferences": "Indstillinger", "preferences": "Indstillinger",
"show-advanced-description": "Vis avancerede funktioner (API nøgler, Webhooks og Data Migrering)", "show-advanced-description": "Vis avancerede funktioner (API nøgler, Webhooks og Data Migrering)",
"back-to-profile": "Tilbage til din profil", "back-to-profile": "Tilbage til din profil",
"looking-for-privacy-settings": "Leder du efter Privatlivsindstillinger?", "looking-for-privacy-settings": "Leder du efter privatlivsindstillinger?",
"manage-your-api-tokens": "Håndtér API Tokens", "manage-your-api-tokens": "Håndtér API tokens",
"manage-user-profile": "Administrer brugerprofil", "manage-user-profile": "Administrer brugerprofil",
"manage-cookbooks": "Administrer kogebøger", "manage-cookbooks": "Administrer kogebøger",
"manage-members": "Administrer medlemmer", "manage-members": "Administrer medlemmer",
"manage-webhooks": "Administrér Webhooks", "manage-webhooks": "Administrér webhooks",
"manage-notifiers": "Administrer notifikationer", "manage-notifiers": "Administrer notifikationer",
"manage-data-migrations": "Administrer datamigreringer" "manage-data-migrations": "Administrer datamigreringer"
}, },
@ -1352,12 +1350,12 @@
"public-cookbook-description": "Offentlige kogebøger kan deles med personer, der ikke er oprettet som brugere i Mealie og vil blive vist på din gruppe side.", "public-cookbook-description": "Offentlige kogebøger kan deles med personer, der ikke er oprettet som brugere i Mealie og vil blive vist på din gruppe side.",
"filter-options": "Filtreringsindstillinger", "filter-options": "Filtreringsindstillinger",
"filter-options-description": "Hvis du har valgt \"Alle påkrævet\", vil kogebogen kun indeholde opskrifter som har alle de valgte elementer.", "filter-options-description": "Hvis du har valgt \"Alle påkrævet\", vil kogebogen kun indeholde opskrifter som har alle de valgte elementer.",
"require-all-categories": "Kræv Alle Kategorier", "require-all-categories": "Kræv alle kategorier",
"require-all-tags": "Kræv Alle Mærker", "require-all-tags": "Kræv alle tags",
"require-all-tools": "Kræv Alle Værktøjer", "require-all-tools": "Kræv alle redskaber",
"cookbook-name": "Navn på kogebog", "cookbook-name": "Navn på kogebog",
"cookbook-with-name": "Kogebog {0}", "cookbook-with-name": "Kogebog {0}",
"household-cookbook-name": "{0} Kogebog {1}", "household-cookbook-name": "{0} kogebog {1}",
"create-a-cookbook": "Opret en ny kogebog", "create-a-cookbook": "Opret en ny kogebog",
"cookbook": "Kogebog" "cookbook": "Kogebog"
}, },

View file

@ -579,7 +579,6 @@
"made-this": "Ich hab's gemacht", "made-this": "Ich hab's gemacht",
"how-did-it-turn-out": "Wie ist es geworden?", "how-did-it-turn-out": "Wie ist es geworden?",
"user-made-this": "{user} hat's gemacht", "user-made-this": "{user} hat's gemacht",
"last-made-date": "Zuletzt gemacht {date}",
"api-extras-description": "Rezepte-Extras sind ein Hauptmerkmal der Mealie API. Sie ermöglichen es dir, benutzerdefinierte JSON Key-Value-Paare zu einem Rezept zu erstellen, um Drittanbieter-Anwendungen zu steuern. Du kannst diese dazu verwenden, um Automatisierungen auszulösen oder benutzerdefinierte Nachrichten an bestimmte Geräte zu senden.", "api-extras-description": "Rezepte-Extras sind ein Hauptmerkmal der Mealie API. Sie ermöglichen es dir, benutzerdefinierte JSON Key-Value-Paare zu einem Rezept zu erstellen, um Drittanbieter-Anwendungen zu steuern. Du kannst diese dazu verwenden, um Automatisierungen auszulösen oder benutzerdefinierte Nachrichten an bestimmte Geräte zu senden.",
"message-key": "Nachrichten-Schlüssel", "message-key": "Nachrichten-Schlüssel",
"parse": "Parsen", "parse": "Parsen",
@ -647,7 +646,6 @@
"nextStep": "Nächster Schritt", "nextStep": "Nächster Schritt",
"recipe-actions": "Rezept-Aktionen", "recipe-actions": "Rezept-Aktionen",
"parser": { "parser": {
"experimental-alert-text": "Mealie verwendet natürliche Sprachverarbeitung (NLP), um Einheiten und Lebensmittel für deine Zutatenliste zu parsen. Diese Funktion ist experimentell und funktioniert möglicherweise nicht immer wie sie sollte. Wenn du die Parser-Ergebnisse nicht verwenden möchtest, wähle 'Abbrechen' und deine Änderungen werden nicht gespeichert.",
"ingredient-parser": "Zutaten-Parser", "ingredient-parser": "Zutaten-Parser",
"explanation": "Um den Zutaten-Parser zu verwenden, klicke auf den Button 'Alles parsen', um den Vorgang zu starten. Nachdem die Zutaten analysiert worden sind, kannst du überprüfen, ob die Einträge korrekt erkannt wurden. Der vom Modell errechnete Zuverlässigkeitswert wird rechts neben der Zutat angezeigt. Diese Angabe ist ein Durchschnitt der Einzelwerte und möglicherweise nicht immer ganz korrekt.", "explanation": "Um den Zutaten-Parser zu verwenden, klicke auf den Button 'Alles parsen', um den Vorgang zu starten. Nachdem die Zutaten analysiert worden sind, kannst du überprüfen, ob die Einträge korrekt erkannt wurden. Der vom Modell errechnete Zuverlässigkeitswert wird rechts neben der Zutat angezeigt. Diese Angabe ist ein Durchschnitt der Einzelwerte und möglicherweise nicht immer ganz korrekt.",
"alerts-explainer": "Es werden Warnungen angezeigt, wenn ein passendes Lebensmittel oder eine Einheit gefunden wurde, aber in der Datenbank nicht vorhanden ist.", "alerts-explainer": "Es werden Warnungen angezeigt, wenn ein passendes Lebensmittel oder eine Einheit gefunden wurde, aber in der Datenbank nicht vorhanden ist.",
@ -722,7 +720,7 @@
"backup-restore": "Wiederherstellen aus Sicherung", "backup-restore": "Wiederherstellen aus Sicherung",
"back-restore-description": "Das Wiederherstellen dieser Sicherung wird alle vorhandenen Daten in deiner Datenbank und im Datenverzeichnis überschreiben und durch den Inhalt dieser Sicherung ersetzen. {cannot-be-undone} Wenn die Wiederherstellung erfolgreich war, wirst du abgemeldet.", "back-restore-description": "Das Wiederherstellen dieser Sicherung wird alle vorhandenen Daten in deiner Datenbank und im Datenverzeichnis überschreiben und durch den Inhalt dieser Sicherung ersetzen. {cannot-be-undone} Wenn die Wiederherstellung erfolgreich war, wirst du abgemeldet.",
"cannot-be-undone": "Diese Aktion kann nicht rückgängig gemacht werden - verwende sie mit Vorsicht.", "cannot-be-undone": "Diese Aktion kann nicht rückgängig gemacht werden - verwende sie mit Vorsicht.",
"postgresql-note": "Wenn du PostGreSQL verwendest, überprüfe bitte den {backup-restore-process} vor der Wiederherstellung.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "Sichern- und Wiederherstellen-Prozess in der Dokumentation", "backup-restore-process-in-the-documentation": "Sichern- und Wiederherstellen-Prozess in der Dokumentation",
"irreversible-acknowledgment": "Ich verstehe, dass diese Maßnahme unumkehrbar und destruktiv ist und Datenverlust verursachen kann", "irreversible-acknowledgment": "Ich verstehe, dass diese Maßnahme unumkehrbar und destruktiv ist und Datenverlust verursachen kann",
"restore-backup": "Sicherung wiederherstellen" "restore-backup": "Sicherung wiederherstellen"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Zusammenführen der ausgewählten Lebensmittel führt diese zusammen in ein einzelnes Lebensmittel. Die Ausgangslebensmittel werden gelöscht und alle Verweise werden auf das zusammengeführte Lebensmittel angepasst.", "merge-dialog-text": "Zusammenführen der ausgewählten Lebensmittel führt diese zusammen in ein einzelnes Lebensmittel. Die Ausgangslebensmittel werden gelöscht und alle Verweise werden auf das zusammengeführte Lebensmittel angepasst.",
"merge-food-example": "{food1} wird zu {food2} zusammengeführt", "merge-food-example": "{food1} wird zu {food2} zusammengeführt",
"seed-dialog-text": "Füllt die Datenbank mit Lebensmitteln basierend auf deiner Landessprache. Dadurch werden mehr als 200 gängige Lebensmittel eingetragen, die verwendet werden können, um die Datenbank zu organisieren. Die Speisen werden über eine Gemeinschaftsleistung übersetzt.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Du hast bereits einige Elemente in deiner Datenbank. Diese Aktion wird Duplikate nicht ausgleichen, du musst sie manuell verwalten.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Lebensmittel zusammenführen", "combine-food": "Lebensmittel zusammenführen",
"source-food": "Quell-Lebensmittel", "source-food": "Quell-Lebensmittel",
"target-food": "Ziel-Lebensmittel", "target-food": "Ziel-Lebensmittel",

View file

@ -15,7 +15,7 @@
"docs": "Τεκμηρίωση", "docs": "Τεκμηρίωση",
"download-log": "Λήψη αρχείου καταγραφής", "download-log": "Λήψη αρχείου καταγραφής",
"download-recipe-json": "Τελευταίο Scraped JSON", "download-recipe-json": "Τελευταίο Scraped JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Γραμμές καταγραφής", "log-lines": "Γραμμές καταγραφής",
"not-demo": "Όχι επίδειξη", "not-demo": "Όχι επίδειξη",
"portfolio": "Χαρτοφυλάκιο", "portfolio": "Χαρτοφυλάκιο",
@ -579,7 +579,6 @@
"made-this": "Το έφτιαξα", "made-this": "Το έφτιαξα",
"how-did-it-turn-out": "Ποιό ήταν το αποτέλεσμα;", "how-did-it-turn-out": "Ποιό ήταν το αποτέλεσμα;",
"user-made-this": "Ο/η {user} το έφτιαξε αυτό", "user-made-this": "Ο/η {user} το έφτιαξε αυτό",
"last-made-date": "Τελευταία παρασκευή {date}",
"api-extras-description": "Τα extras συνταγών αποτελούν βασικό χαρακτηριστικό του Mealie API. Σας επιτρέπουν να δημιουργήσετε προσαρμοσμένα ζεύγη κλειδιού/τιμής JSON μέσα σε μια συνταγή, να παραπέμψετε σε εφαρμογές τρίτων. Μπορείτε να χρησιμοποιήσετε αυτά τα κλειδιά για την παροχή πληροφοριών, για παράδειγμα πυροδότηση αυτοματισμών ή μετάδοση προσαρμοσμένων μηνυμάτων στη συσκευή που επιθυμείτε.", "api-extras-description": "Τα extras συνταγών αποτελούν βασικό χαρακτηριστικό του Mealie API. Σας επιτρέπουν να δημιουργήσετε προσαρμοσμένα ζεύγη κλειδιού/τιμής JSON μέσα σε μια συνταγή, να παραπέμψετε σε εφαρμογές τρίτων. Μπορείτε να χρησιμοποιήσετε αυτά τα κλειδιά για την παροχή πληροφοριών, για παράδειγμα πυροδότηση αυτοματισμών ή μετάδοση προσαρμοσμένων μηνυμάτων στη συσκευή που επιθυμείτε.",
"message-key": "Κλειδί Μηνύματος", "message-key": "Κλειδί Μηνύματος",
"parse": "Ανάλυση", "parse": "Ανάλυση",
@ -647,7 +646,6 @@
"nextStep": "Επόμενο βήμα", "nextStep": "Επόμενο βήμα",
"recipe-actions": "Ενέργειες Συνταγής", "recipe-actions": "Ενέργειες Συνταγής",
"parser": { "parser": {
"experimental-alert-text": "Το Mealie χρησιμοποιεί επεξεργασία φυσικής γλώσσας για να αναλύσει και να δημιουργήσει μονάδες και αντικείμενα τροφίμων για τα συστατικά της συνταγής σας. Αυτή η λειτουργία είναι πειραματική και μπορεί να μην λειτουργεί πάντα όπως πρέπει. Αν προτιμάτε να μην χρησιμοποιείτε τα αναλυμένα αποτελέσματα, μπορείτε να επιλέξετε 'Ακυρο' και οι αλλαγές σας δεν θα αποθηκευτούν.",
"ingredient-parser": "Αναλυτής Συστατικών", "ingredient-parser": "Αναλυτής Συστατικών",
"explanation": "Για να χρησιμοποιήσετε τον αναλυτή συστατικών, κάντε κλικ στο πλήκτρο 'Ανάλυση Ολων' για να ξεκινήσετε τη διαδικασία. Μόλις τα αναλυμένα συστατικά είναι διαθέσιμα, μπορείτε να τα επανεξετάσετε και να βεβαιωθείτε ότι έχουν αναλυθεί σωστά. Η βαθμολογία εμπιστοσύνης του μοντέλου εμφανίζεται στα δεξιά του τίτλου αντικειμένου. Αυτό το σκορ είναι ένας μέσος όρος όλων των επιμέρους βαθμολογιών και μπορεί να μην είναι πάντα εντελώς ακριβής.", "explanation": "Για να χρησιμοποιήσετε τον αναλυτή συστατικών, κάντε κλικ στο πλήκτρο 'Ανάλυση Ολων' για να ξεκινήσετε τη διαδικασία. Μόλις τα αναλυμένα συστατικά είναι διαθέσιμα, μπορείτε να τα επανεξετάσετε και να βεβαιωθείτε ότι έχουν αναλυθεί σωστά. Η βαθμολογία εμπιστοσύνης του μοντέλου εμφανίζεται στα δεξιά του τίτλου αντικειμένου. Αυτό το σκορ είναι ένας μέσος όρος όλων των επιμέρους βαθμολογιών και μπορεί να μην είναι πάντα εντελώς ακριβής.",
"alerts-explainer": "Θα εμφανίζονται ειδοποιήσεις αν βρεθεί ένα αντίστοιχο τρόφιμο ή μονάδα αλλά δεν υπάρχει στη βάση δεδομένων.", "alerts-explainer": "Θα εμφανίζονται ειδοποιήσεις αν βρεθεί ένα αντίστοιχο τρόφιμο ή μονάδα αλλά δεν υπάρχει στη βάση δεδομένων.",
@ -722,7 +720,7 @@
"backup-restore": "Επαναφορά Αντιγράφου Ασφαλείας", "backup-restore": "Επαναφορά Αντιγράφου Ασφαλείας",
"back-restore-description": "Η επαναφορά αυτού του αντιγράφου ασφαλείας θα αντικαταστήσει όλα τα τρέχοντα δεδομένα στη βάση δεδομένων σας και στον κατάλογο δεδομένων και θα τα αντικαταστήσει με τα περιεχόμενα αυτού του αντιγράφου ασφαλείας. {cannot-be-undone} Αν η αποκατάσταση γίνει με επιτυχία, θα αποσυνδεθείτε.", "back-restore-description": "Η επαναφορά αυτού του αντιγράφου ασφαλείας θα αντικαταστήσει όλα τα τρέχοντα δεδομένα στη βάση δεδομένων σας και στον κατάλογο δεδομένων και θα τα αντικαταστήσει με τα περιεχόμενα αυτού του αντιγράφου ασφαλείας. {cannot-be-undone} Αν η αποκατάσταση γίνει με επιτυχία, θα αποσυνδεθείτε.",
"cannot-be-undone": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί - χρησιμοποιήστε με προσοχή.", "cannot-be-undone": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί - χρησιμοποιήστε με προσοχή.",
"postgresql-note": "Αν χρησιμοποιείτε το PostGreSQL, παρακαλώ ελέγξτε τη {backup-restore-process} πριν από την επαναφορά.", "postgresql-note": "Αν χρησιμοποιείτε το PostgreSQL, παρακαλώ ελέγξτε τη {backup-restore-process} πριν από την επαναφορά.",
"backup-restore-process-in-the-documentation": "διαδικασία δημιουργίας αντιγράφων ασφαλείας/επαναφοράς στην τεκμηρίωση", "backup-restore-process-in-the-documentation": "διαδικασία δημιουργίας αντιγράφων ασφαλείας/επαναφοράς στην τεκμηρίωση",
"irreversible-acknowledgment": "Κατανοώ ότι αυτή η ενέργεια είναι μη αναστρέψιμη, καταστροφική και μπορεί να προκαλέσει απώλεια δεδομένων", "irreversible-acknowledgment": "Κατανοώ ότι αυτή η ενέργεια είναι μη αναστρέψιμη, καταστροφική και μπορεί να προκαλέσει απώλεια δεδομένων",
"restore-backup": "Επαναφορά αντιγράφου ασφαλείας" "restore-backup": "Επαναφορά αντιγράφου ασφαλείας"

View file

@ -15,7 +15,7 @@
"docs": "Docs", "docs": "Docs",
"download-log": "Download Log", "download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON", "download-recipe-json": "Last Scraped JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Log Lines", "log-lines": "Log Lines",
"not-demo": "Not Demo", "not-demo": "Not Demo",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -298,7 +298,7 @@
"household-recipe-preferences": "Household Recipe Preferences", "household-recipe-preferences": "Household Recipe Preferences",
"default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be change for individual recipe sin the recipe settings menu.", "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be change for individual recipe sin the recipe settings menu.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside your household to see your recipes", "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside your household to see your recipes",
"allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorising the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link",
"household-preferences": "Household Preferences" "household-preferences": "Household Preferences"
}, },
"meal-plan": { "meal-plan": {
@ -386,7 +386,7 @@
"title": "Copy Me That Recipe Manager" "title": "Copy Me That Recipe Manager"
}, },
"paprika": { "paprika": {
"description-long": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.", "description-long": "Mealie can import recipes from the Paprika application. Export your recipes from Paprika, rename the export extension to .zip and upload it below.",
"title": "Paprika Recipe Manager" "title": "Paprika Recipe Manager"
}, },
"mealie-pre-v1": { "mealie-pre-v1": {
@ -406,11 +406,11 @@
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.", "chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1", "recipe-1": "Recipe 1",
"recipe-2": "Recipe 2", "recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.", "paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from Paprika, rename the export extension to .zip and upload it below.",
"mealie-text": "Mealie can import recipes from the Mealie application from a pre v1.0 release. Export your recipes from your old instance, and upload the zip file below. Note that only recipes can be imported from the export.", "mealie-text": "Mealie can import recipes from the Mealie application from a pre v1.0 release. Export your recipes from your old instance, and upload the zip file below. Note that only recipes can be imported from the export.",
"plantoeat": { "plantoeat": {
"title": "Plan to Eat", "title": "Plan to Eat",
"description-long": "Mealie can import recipies from Plan to Eat." "description-long": "Mealie can import recipes from Plan to Eat."
}, },
"myrecipebox": { "myrecipebox": {
"title": "My Recipe Box", "title": "My Recipe Box",
@ -423,7 +423,7 @@
}, },
"new-recipe": { "new-recipe": {
"bulk-add": "Bulk Add", "bulk-add": "Bulk Add",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.", "error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a GitHub issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything", "error-title": "Looks Like We Couldn't Find Anything",
"from-url": "Import a Recipe", "from-url": "Import a Recipe",
"github-issues": "GitHub Issues", "github-issues": "GitHub Issues",
@ -542,9 +542,9 @@
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list", "successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to meal plan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to meal plan",
"failed-to-add-to-list": "Failed to add to list", "failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"yields-amount-with-text": "Yields {amount} {text}", "yields-amount-with-text": "Yields {amount} {text}",
@ -579,7 +579,6 @@
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
@ -647,10 +646,9 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching food or unit is found but does not exist in the database.",
"select-parser": "Select Parser", "select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor", "natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser", "brute-parser": "Brute Parser",
@ -722,7 +720,7 @@
"backup-restore": "Backup Restore", "backup-restore": "Backup Restore",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.", "cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore process in the documentation", "backup-restore-process-in-the-documentation": "backup/restore process in the documentation",
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss", "irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
"restore-backup": "Restore Backup" "restore-backup": "Restore Backup"
@ -810,7 +808,7 @@
"webhooks-caps": "WEBHOOKS", "webhooks-caps": "WEBHOOKS",
"webhooks": "Webhooks", "webhooks": "Webhooks",
"webhook-name": "Webhook Name", "webhook-name": "Webhook Name",
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the scheduled." "description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the schedule."
}, },
"bug-report": "Bug Report", "bug-report": "Bug Report",
"bug-report-information": "Use this information to report a bug. Providing details of your instance to developers is the best way to get your issues resolved quickly.", "bug-report-information": "Use this information to report a bug. Providing details of your instance to developers is the best way to get your issues resolved quickly.",
@ -1031,10 +1029,10 @@
"user-can-invite-other-to-group": "User can invite others to group", "user-can-invite-other-to-group": "User can invite others to group",
"user-can-manage-group": "User can manage group", "user-can-manage-group": "User can manage group",
"user-can-manage-household": "User can manage household", "user-can-manage-household": "User can manage household",
"user-can-organize-group-data": "User can organize group data", "user-can-organize-group-data": "User can organise group data",
"enable-advanced-features": "Enable advanced features", "enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.", "it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!", "dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this any more? Be sure to change your email in your user settings!",
"forgot-password": "Forgot Password", "forgot-password": "Forgot Password",
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.", "forgot-password-text": "Please enter your email address and we will send you a link to reset your password.",
"changes-reflected-immediately": "Changes to this user will be reflected immediately." "changes-reflected-immediately": "Changes to this user will be reflected immediately."

View file

@ -15,7 +15,7 @@
"docs": "Docs", "docs": "Docs",
"download-log": "Download Log", "download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON", "download-recipe-json": "Last Scraped JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Log Lines", "log-lines": "Log Lines",
"not-demo": "Not Demo", "not-demo": "Not Demo",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -579,7 +579,6 @@
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Backup Restore", "backup-restore": "Backup Restore",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.", "cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore process in the documentation", "backup-restore-process-in-the-documentation": "backup/restore process in the documentation",
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss", "irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
"restore-backup": "Restore Backup" "restore-backup": "Restore Backup"

View file

@ -15,7 +15,7 @@
"docs": "Documentación", "docs": "Documentación",
"download-log": "Descargar Log", "download-log": "Descargar Log",
"download-recipe-json": "Último JSON extraído", "download-recipe-json": "Último JSON extraído",
"github": "Github", "github": "GitHub",
"log-lines": "Líneas de registro", "log-lines": "Líneas de registro",
"not-demo": "No Demo", "not-demo": "No Demo",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -579,7 +579,6 @@
"made-this": "Lo hice", "made-this": "Lo hice",
"how-did-it-turn-out": "¿Cómo resultó esto?", "how-did-it-turn-out": "¿Cómo resultó esto?",
"user-made-this": "{user} hizo esto", "user-made-this": "{user} hizo esto",
"last-made-date": "Cocinado por última vez el {date}",
"api-extras-description": "Los extras de las recetas son una característica clave de la API de Mealie. Permiten crear pares json clave/valor personalizados dentro de una receta para acceder desde aplicaciones de terceros. Puede utilizar estas claves para almacenar información, para activar la automatización o mensajes personalizados para transmitir al dispositivo deseado.", "api-extras-description": "Los extras de las recetas son una característica clave de la API de Mealie. Permiten crear pares json clave/valor personalizados dentro de una receta para acceder desde aplicaciones de terceros. Puede utilizar estas claves para almacenar información, para activar la automatización o mensajes personalizados para transmitir al dispositivo deseado.",
"message-key": "Clave de mensaje", "message-key": "Clave de mensaje",
"parse": "Analizar", "parse": "Analizar",
@ -647,7 +646,6 @@
"nextStep": "Siguiente paso", "nextStep": "Siguiente paso",
"recipe-actions": "Acciones de Receta", "recipe-actions": "Acciones de Receta",
"parser": { "parser": {
"experimental-alert-text": "Mealie usa procesamiento de lenguaje natural para analizar y crear unidades y productos para los ingredientes de tu receta. Esta característica es experimental y puede no ser confiable. Si prefieres no usar los resultados analizados, elige 'Cancelar' y los cambios serán descartados.",
"ingredient-parser": "Analizador de Ingredientes", "ingredient-parser": "Analizador de Ingredientes",
"explanation": "Para usar el analizador de ingredientes, haz clic en 'Analizar Todo'. Una vez que los ingredientes procesados estén disponibles, puedes revisar los productos y verificar que fueron analizados correctamente. El puntaje de confianza del modelo se muestra a la derecha del título del producto. Este puntaje es un promedio de todos los puntajes individuales y puede no ser del todo preciso.", "explanation": "Para usar el analizador de ingredientes, haz clic en 'Analizar Todo'. Una vez que los ingredientes procesados estén disponibles, puedes revisar los productos y verificar que fueron analizados correctamente. El puntaje de confianza del modelo se muestra a la derecha del título del producto. Este puntaje es un promedio de todos los puntajes individuales y puede no ser del todo preciso.",
"alerts-explainer": "Las alertas se mostrarán si se encuentra un alimento o unidad que coincida pero que no exista en la base de datos.", "alerts-explainer": "Las alertas se mostrarán si se encuentra un alimento o unidad que coincida pero que no exista en la base de datos.",
@ -722,7 +720,7 @@
"backup-restore": "Restaurar Copia de Seguridad", "backup-restore": "Restaurar Copia de Seguridad",
"back-restore-description": "Restaurar esta copia de seguridad sobrescribirá todos los datos actuales de su base de datos y del directorio de datos y los sustituirá por el contenido de esta copia. {cannot-be-undone} Si la restauración se realiza correctamente, se cerrará su sesión.", "back-restore-description": "Restaurar esta copia de seguridad sobrescribirá todos los datos actuales de su base de datos y del directorio de datos y los sustituirá por el contenido de esta copia. {cannot-be-undone} Si la restauración se realiza correctamente, se cerrará su sesión.",
"cannot-be-undone": "Esta acción no se puede deshacer, use con precaución.", "cannot-be-undone": "Esta acción no se puede deshacer, use con precaución.",
"postgresql-note": "Si estás usando PostGreSQL, por favor revisa el {backup-restore-process} antes de restaurar.", "postgresql-note": "Si estás usando PostgreSQL, por favor revisa {backup-restore-process} antes de restaurar.",
"backup-restore-process-in-the-documentation": "copia de seguridad/proceso de restauración en la documentación", "backup-restore-process-in-the-documentation": "copia de seguridad/proceso de restauración en la documentación",
"irreversible-acknowledgment": "Entiendo que esta acción es irreversible, destructiva y puede causar pérdida de datos", "irreversible-acknowledgment": "Entiendo que esta acción es irreversible, destructiva y puede causar pérdida de datos",
"restore-backup": "Restaurar copia de seguridad" "restore-backup": "Restaurar copia de seguridad"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Combinar los alimentos seleccionados fusionará el alimento origen y destinatario en un solo alimento. El alimento origen será eliminado y todas las referencias a él serán actualizadas para apuntar al nuevo alimento.", "merge-dialog-text": "Combinar los alimentos seleccionados fusionará el alimento origen y destinatario en un solo alimento. El alimento origen será eliminado y todas las referencias a él serán actualizadas para apuntar al nuevo alimento.",
"merge-food-example": "Fusionando {food1} con {food2}", "merge-food-example": "Fusionando {food1} con {food2}",
"seed-dialog-text": "Añade a la base de datos ejemplos de alimentos basados en su idioma local. Esto creará más de 200 alimentos comunes que se pueden utilizar para organizar su base de datos. Los alimentos se traducen a través de un esfuerzo comunitario.", "seed-dialog-text": "Rellena la base de datos con alimentos basados en tu idioma local. Esto creará más de 200 alimentos comunes que se pueden usar para organizar tu base de datos. Los alimentos son traducidos a través de un esfuerzo comunitario.",
"seed-dialog-warning": "Ya tiene algunos elementos en tu base de datos. Esta acción no reconciliará duplicados, tendrá que gestionarlos manualmente.", "seed-dialog-warning": "Ya tienes algunos elementos en tu base de datos. Esta acción no reconciliará los duplicados, tendrás que gestionarlos manualmente.",
"combine-food": "Combinar Alimentos", "combine-food": "Combinar Alimentos",
"source-food": "Fuente de Alimento", "source-food": "Fuente de Alimento",
"target-food": "Alimentos objetivo", "target-food": "Alimentos objetivo",

View file

@ -15,7 +15,7 @@
"docs": "Dokumentatsioon", "docs": "Dokumentatsioon",
"download-log": "Allalaadimiste logi", "download-log": "Allalaadimiste logi",
"download-recipe-json": "Viimati ekstraheeritud JSON", "download-recipe-json": "Viimati ekstraheeritud JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Logiread", "log-lines": "Logiread",
"not-demo": "Mitte-demo", "not-demo": "Mitte-demo",
"portfolio": "Portfoolio", "portfolio": "Portfoolio",
@ -579,7 +579,6 @@
"made-this": "Olen seda valmistanud", "made-this": "Olen seda valmistanud",
"how-did-it-turn-out": "Kuidas tuli see välja?", "how-did-it-turn-out": "Kuidas tuli see välja?",
"user-made-this": "{user} on seda valmistanud", "user-made-this": "{user} on seda valmistanud",
"last-made-date": "Viimati valmistatud: {date}",
"api-extras-description": "Retsepti väljavõtted on Meali API oluline funktsioon. Neid saab kasutada kohandatud JSON-võtme/väärtuse paaride loomiseks retseptis, et viidata kolmandate osapoolte rakendustele. Neid klahve saab kasutada teabe edastamiseks, näiteks automaatse toimingu või kohandatud sõnumi käivitamiseks teie valitud seadmele.", "api-extras-description": "Retsepti väljavõtted on Meali API oluline funktsioon. Neid saab kasutada kohandatud JSON-võtme/väärtuse paaride loomiseks retseptis, et viidata kolmandate osapoolte rakendustele. Neid klahve saab kasutada teabe edastamiseks, näiteks automaatse toimingu või kohandatud sõnumi käivitamiseks teie valitud seadmele.",
"message-key": "Sõnumi võti", "message-key": "Sõnumi võti",
"parse": "Analüüsi", "parse": "Analüüsi",
@ -647,7 +646,6 @@
"nextStep": "Järgmine samm", "nextStep": "Järgmine samm",
"recipe-actions": "Retsepti toimingud", "recipe-actions": "Retsepti toimingud",
"parser": { "parser": {
"experimental-alert-text": "Mealie kasutab teie retseptide koostisosade analüüsimiseks ja ühikute ja tarvikute loomiseks loomulikku keeletöötlust. See funktsioon on katseline ja ei pruugi alati ootuspäraselt töötada. Kui te neid struktureeritud tulemusi ei soovi, võite vajutada nuppu \"Tühista\" ja teie muudatusi ei salvestata.",
"ingredient-parser": "Koostisosade analüüser", "ingredient-parser": "Koostisosade analüüser",
"explanation": "Koostisosade sorteerimise tööriista kasutamiseks vajutage nuppu \"Sordi kõik\". Kui koostisosad on saadaval, saate üksused üle vaadata ja kontrollida, kas analüüsimine õnnestus. Mudeli usaldusväärtus on loetletud üksuse nimest paremal. See väärtus on üksikute väärtuste keskmine ja ei ole alati väga täpne.", "explanation": "Koostisosade sorteerimise tööriista kasutamiseks vajutage nuppu \"Sordi kõik\". Kui koostisosad on saadaval, saate üksused üle vaadata ja kontrollida, kas analüüsimine õnnestus. Mudeli usaldusväärtus on loetletud üksuse nimest paremal. See väärtus on üksikute väärtuste keskmine ja ei ole alati väga täpne.",
"alerts-explainer": "Teile antakse märku, kui leitakse sobiv toit või üksus, kuid seda pole andmebaasis olemas.", "alerts-explainer": "Teile antakse märku, kui leitakse sobiv toit või üksus, kuid seda pole andmebaasis olemas.",
@ -722,7 +720,7 @@
"backup-restore": "Taasta tagavarakoopiast", "backup-restore": "Taasta tagavarakoopiast",
"back-restore-description": "Selle varukoopia taastamisel kirjutatakse üle kõik teie andmebaasis ja andmebaasihalduris olevad andmed ning asendatakse need selle varukoopia sisuga. {cannot-be-undone} Kui taastamine õnnestub, logitakse teid välja.", "back-restore-description": "Selle varukoopia taastamisel kirjutatakse üle kõik teie andmebaasis ja andmebaasihalduris olevad andmed ning asendatakse need selle varukoopia sisuga. {cannot-be-undone} Kui taastamine õnnestub, logitakse teid välja.",
"cannot-be-undone": "Seda tegevust ei saa tagasi võtta - kasuta ettevaatusega.", "cannot-be-undone": "Seda tegevust ei saa tagasi võtta - kasuta ettevaatusega.",
"postgresql-note": "Kui sa kasutad PostGreSQL-i, palun vaata {backup-restore-process} enne taastamist.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "varundamise/taastamise protsessi dokumentatsioonis", "backup-restore-process-in-the-documentation": "varundamise/taastamise protsessi dokumentatsioonis",
"irreversible-acknowledgment": "Ma saan aru, et seda tegevust ei ole võimalik tagasi võtta, on destruktiivne, ning võib põhjustada andmekadu", "irreversible-acknowledgment": "Ma saan aru, et seda tegevust ei ole võimalik tagasi võtta, on destruktiivne, ning võib põhjustada andmekadu",
"restore-backup": "Taasta tagavarakoopiast" "restore-backup": "Taasta tagavarakoopiast"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Valitud toitude kombineerimine ühendab koostisained ja keskendub ühele roale. Lähtetoidud eemaldatakse ja kõik viited lähtetoidule värskendatakse, et osutada sihttoidule.", "merge-dialog-text": "Valitud toitude kombineerimine ühendab koostisained ja keskendub ühele roale. Lähtetoidud eemaldatakse ja kõik viited lähtetoidule värskendatakse, et osutada sihttoidule.",
"merge-food-example": "{food1} liitmine {food2}-ga", "merge-food-example": "{food1} liitmine {food2}-ga",
"seed-dialog-text": "Lisage roogasid andmebaasi kohalikus keeles. See loob üle 200 levinud tooraine, mida saab kasutada andmebaasi korrastamiseks. Tooraineid tõlgitakse kogukonna tegevuste kaudu.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Teie andmebaasis on juba mõned üksused. See funktsioon ei sobi duplikaatidega, peate neid käsitsi redigeerima.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Liida toidud", "combine-food": "Liida toidud",
"source-food": "Lähtetoid", "source-food": "Lähtetoid",
"target-food": "Sihttoit", "target-food": "Sihttoit",

View file

@ -15,7 +15,7 @@
"docs": "Docs", "docs": "Docs",
"download-log": "Latausloki", "download-log": "Latausloki",
"download-recipe-json": "Viimeisin haettu JSON", "download-recipe-json": "Viimeisin haettu JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Lokirivit", "log-lines": "Lokirivit",
"not-demo": "Ei esittelyversiotilassa", "not-demo": "Ei esittelyversiotilassa",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -277,7 +277,7 @@
"admin-group-management-text": "Muutokset tähän ryhmään tulevat näkymään välittömästi.", "admin-group-management-text": "Muutokset tähän ryhmään tulevat näkymään välittömästi.",
"group-id-value": "Ryhmän tunniste: {0}", "group-id-value": "Ryhmän tunniste: {0}",
"total-households": "Kotitaloudet Yhteensä", "total-households": "Kotitaloudet Yhteensä",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household" "you-must-select-a-group-before-selecting-a-household": "Sinun tulee valita ryhmä ennen kuin valitset kotitalouden"
}, },
"household": { "household": {
"household": "Kotitalous", "household": "Kotitalous",
@ -518,7 +518,7 @@
"save-recipe-before-use": "Tallenna resepti ennen käyttöä", "save-recipe-before-use": "Tallenna resepti ennen käyttöä",
"section-title": "Osion otsikko", "section-title": "Osion otsikko",
"servings": "Annokset", "servings": "Annokset",
"serves-amount": "Serves {amount}", "serves-amount": "{amount} annosta",
"share-recipe-message": "Halusin jakaa reseptin {0} kanssasi.", "share-recipe-message": "Halusin jakaa reseptin {0} kanssasi.",
"show-nutrition-values": "Näytä ravintoarvot", "show-nutrition-values": "Näytä ravintoarvot",
"sodium-content": "Natrium", "sodium-content": "Natrium",
@ -546,9 +546,9 @@
"failed-to-add-recipes-to-list": "Luetteloon lisääminen epäonnistui", "failed-to-add-recipes-to-list": "Luetteloon lisääminen epäonnistui",
"failed-to-add-recipe-to-mealplan": "Reseptiä ei voitu lisätä ateriasuunnitelmaan", "failed-to-add-recipe-to-mealplan": "Reseptiä ei voitu lisätä ateriasuunnitelmaan",
"failed-to-add-to-list": "Luetteloon lisääminen epäonnistui", "failed-to-add-to-list": "Luetteloon lisääminen epäonnistui",
"yield": "Sato", "yield": "Tuotto",
"yields-amount-with-text": "Yields {amount} {text}", "yields-amount-with-text": "Tuottaa {amount} {text}",
"yield-text": "Yield Text", "yield-text": "Tuotosteksti",
"quantity": "Määrä", "quantity": "Määrä",
"choose-unit": "Valitse Yksikkö", "choose-unit": "Valitse Yksikkö",
"press-enter-to-create": "Luo painamalla Enter", "press-enter-to-create": "Luo painamalla Enter",
@ -579,7 +579,6 @@
"made-this": "Tein tämän", "made-this": "Tein tämän",
"how-did-it-turn-out": "Miten se onnistui?", "how-did-it-turn-out": "Miten se onnistui?",
"user-made-this": "{user} teki tämän", "user-made-this": "{user} teki tämän",
"last-made-date": "Viimeksi valmistettu {date}",
"api-extras-description": "Reseptiekstrat ovat Mealien API:n tärkeä ominaisuus. Niiden avulla voidaan luoda mukautettuja JSON-avain/arvo-pareja reseptin sisällä viitaten kolmannen osapuolen sovelluksiin. Näitä avaimia voi käyttää tiedon antamiseksi, esimerkiksi automaattisen toiminnon tai mukautetun viestin käynnistämiseksi haluamaasi laitteeseen.", "api-extras-description": "Reseptiekstrat ovat Mealien API:n tärkeä ominaisuus. Niiden avulla voidaan luoda mukautettuja JSON-avain/arvo-pareja reseptin sisällä viitaten kolmannen osapuolen sovelluksiin. Näitä avaimia voi käyttää tiedon antamiseksi, esimerkiksi automaattisen toiminnon tai mukautetun viestin käynnistämiseksi haluamaasi laitteeseen.",
"message-key": "Viestiavain", "message-key": "Viestiavain",
"parse": "Jäsennä", "parse": "Jäsennä",
@ -637,9 +636,9 @@
"recipe-debugger-use-openai-description": "Käytä OpenAI:ta kaavinkirjaston sijaan tulosten jäsentämiseen. Luodessa reseptiä URL:n kautta tämä tehdään ilman eri kysymystä, kun kaavinkirjasto ei toimi, mutta voit kokeilla sitä tässä manuaalisesti.", "recipe-debugger-use-openai-description": "Käytä OpenAI:ta kaavinkirjaston sijaan tulosten jäsentämiseen. Luodessa reseptiä URL:n kautta tämä tehdään ilman eri kysymystä, kun kaavinkirjasto ei toimi, mutta voit kokeilla sitä tässä manuaalisesti.",
"debug": "Vianhaku", "debug": "Vianhaku",
"tree-view": "Puunäkymä", "tree-view": "Puunäkymä",
"recipe-servings": "Recipe Servings", "recipe-servings": "Reseptin annokset",
"recipe-yield": "Reseptin tekijä", "recipe-yield": "Reseptin tuotto",
"recipe-yield-text": "Recipe Yield Text", "recipe-yield-text": "Reseptin tuotosteksti",
"unit": "Yksikkö", "unit": "Yksikkö",
"upload-image": "Lataa kuva", "upload-image": "Lataa kuva",
"screen-awake": "Pidä näyttö aina päällä", "screen-awake": "Pidä näyttö aina päällä",
@ -647,7 +646,6 @@
"nextStep": "Seuraava askel", "nextStep": "Seuraava askel",
"recipe-actions": "Reseptin toiminnot", "recipe-actions": "Reseptin toiminnot",
"parser": { "parser": {
"experimental-alert-text": "Mealie käyttää luonnollisen kielen prosessointia jäsentääkseen ja luodakseen yksiköitä ja tarvikkeita reseptiesi ainesosille. Ominaisuus on kokeellinen, eikä välttämättä toimi aina odotetulla tavalla. Jos et halua näitä jäsennettyjä tuloksia, voit painaa \"Peruuta\", ja muutoksiasi ei tallenneta.",
"ingredient-parser": "Ainesosan jäsentäjä", "ingredient-parser": "Ainesosan jäsentäjä",
"explanation": "Paina \"Jäsennä kaikki\" -painiketta käyttääksesi ainesosien jäsennystyökalua. Kun ainesosat ovat saatavilla, voit tarkastella kohteita ja varmistaa, että jäsennys onnistui. Mallin luottamusarvo mainitaan kohteen nimen oikealla puolella. Tämä arvo on yksittäisten arvojen keskiarvo, eikä se ole aina kovin tarkka.", "explanation": "Paina \"Jäsennä kaikki\" -painiketta käyttääksesi ainesosien jäsennystyökalua. Kun ainesosat ovat saatavilla, voit tarkastella kohteita ja varmistaa, että jäsennys onnistui. Mallin luottamusarvo mainitaan kohteen nimen oikealla puolella. Tämä arvo on yksittäisten arvojen keskiarvo, eikä se ole aina kovin tarkka.",
"alerts-explainer": "Ohjelmisto hälyttää, mikäli jokin sopiva ruoka tai yksikkö löytyy, mutta sitä ei ole olemassa tietokannassa.", "alerts-explainer": "Ohjelmisto hälyttää, mikäli jokin sopiva ruoka tai yksikkö löytyy, mutta sitä ei ole olemassa tietokannassa.",
@ -662,24 +660,24 @@
"no-food": "Ei ruokaa" "no-food": "Ei ruokaa"
}, },
"reset-servings-count": "Palauta Annoksien Määrä", "reset-servings-count": "Palauta Annoksien Määrä",
"not-linked-ingredients": "Additional Ingredients" "not-linked-ingredients": "Muut ainesosat"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Recipe Finder", "recipe-finder": "Reseptin etsijä",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.", "recipe-finder-description": "Etsi sopivia reseptejä saatavilla olevien ainesosien perusteella. Voit myös suodattaa tulokset saatavilla olevien ruoanvalmistusvälineiden perusteella, ja asettaa enimmäismäärän puuttuvia ainesosia tai välineitä.",
"selected-ingredients": "Selected Ingredients", "selected-ingredients": "Valitut ainesosat",
"no-ingredients-selected": "No ingredients selected", "no-ingredients-selected": "Ei valittuja ainesosia",
"missing": "Missing", "missing": "Puuttuu",
"no-recipes-found": "No recipes found", "no-recipes-found": "Reseptejä ei löytynyt",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters", "no-recipes-found-description": "Kokeile lisätä enemmän ainesosia hakuun tai säätää suodattimia",
"include-ingredients-on-hand": "Include Ingredients On Hand", "include-ingredients-on-hand": "Sisällytä saatavilla olevat ainesosat",
"include-tools-on-hand": "Include Tools On Hand", "include-tools-on-hand": "Sisällytä saatavilla olevat välineet",
"max-missing-ingredients": "Max Missing Ingredients", "max-missing-ingredients": "Puuttuvien ainesten enimmäismäärä",
"max-missing-tools": "Max Missing Tools", "max-missing-tools": "Puuttuvien välineiden enimmäismäärä",
"selected-tools": "Selected Tools", "selected-tools": "Valitut välineet",
"other-filters": "Other Filters", "other-filters": "Muut suodattimet",
"ready-to-make": "Ready to Make", "ready-to-make": "Valmis tekemään",
"almost-ready-to-make": "Almost Ready to Make" "almost-ready-to-make": "Melkein valmis tekemään"
}, },
"search": { "search": {
"advanced-search": "Tarkennettu haku", "advanced-search": "Tarkennettu haku",
@ -690,7 +688,7 @@
"or": "Tai", "or": "Tai",
"has-any": "On Mikä Tahansa", "has-any": "On Mikä Tahansa",
"has-all": "On Kaikki", "has-all": "On Kaikki",
"clear-selection": "Clear Selection", "clear-selection": "Tyhjennä valinnat",
"results": "Tulokset", "results": "Tulokset",
"search": "Hae", "search": "Hae",
"search-mealie": "Hae Mealiestä (paina /)", "search-mealie": "Hae Mealiestä (paina /)",
@ -722,7 +720,7 @@
"backup-restore": "Varmuuskopion palautus", "backup-restore": "Varmuuskopion palautus",
"back-restore-description": "Tämän varmuuskopion palauttaminen korvaa kaikki tietokannassasi ja tietokannassasi olevat tiedot ja korvaa ne tämän varmuuskopion sisällöllä. {cannot-be-undone} Jos palautus onnistuu, sinut kirjataan ulos.", "back-restore-description": "Tämän varmuuskopion palauttaminen korvaa kaikki tietokannassasi ja tietokannassasi olevat tiedot ja korvaa ne tämän varmuuskopion sisällöllä. {cannot-be-undone} Jos palautus onnistuu, sinut kirjataan ulos.",
"cannot-be-undone": "Tätä toimintoa ei voi kumota - käytä varoen.", "cannot-be-undone": "Tätä toimintoa ei voi kumota - käytä varoen.",
"postgresql-note": "Jos käytät PostGreSQL-tietokantaa, ole hyvä ja tarkista {backup-restore-process} ennen palauttamista.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "varmuuskopiointi/palautus prosessi dokumentaatiossa", "backup-restore-process-in-the-documentation": "varmuuskopiointi/palautus prosessi dokumentaatiossa",
"irreversible-acknowledgment": "Ymmärrän, että tämä toiminta on peruuttamatonta ja voi aiheuttaa tietojen häviämistä", "irreversible-acknowledgment": "Ymmärrän, että tämä toiminta on peruuttamatonta ja voi aiheuttaa tietojen häviämistä",
"restore-backup": "Palauta varmuuskopio" "restore-backup": "Palauta varmuuskopio"
@ -884,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Haluatko varmasti valita kaikki kohteet?", "are-you-sure-you-want-to-check-all-items": "Haluatko varmasti valita kaikki kohteet?",
"are-you-sure-you-want-to-uncheck-all-items": "Haluatko varmasti poistaa kaikki valinnat?", "are-you-sure-you-want-to-uncheck-all-items": "Haluatko varmasti poistaa kaikki valinnat?",
"are-you-sure-you-want-to-delete-checked-items": "Haluatko varmasti poistaa kaikki valitut kohteet?", "are-you-sure-you-want-to-delete-checked-items": "Haluatko varmasti poistaa kaikki valitut kohteet?",
"no-shopping-lists-found": "No Shopping Lists Found" "no-shopping-lists-found": "Ostoslistoja ei löytynyt"
}, },
"sidebar": { "sidebar": {
"all-recipes": "Reseptit", "all-recipes": "Reseptit",
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Valittujen elintarvikkeiden yhdistäminen yhdistää raaka-aineet ja kohdistaa ne yhteen ainoaan ruokaan. Lähde-elintarvikkeet poistetaan, ja kaikki viittaukset lähtöelintarvikkeeseen saatetaan ajan tasalle niin, että ne osoittavat kohteena olevan elintarvikkeen.", "merge-dialog-text": "Valittujen elintarvikkeiden yhdistäminen yhdistää raaka-aineet ja kohdistaa ne yhteen ainoaan ruokaan. Lähde-elintarvikkeet poistetaan, ja kaikki viittaukset lähtöelintarvikkeeseen saatetaan ajan tasalle niin, että ne osoittavat kohteena olevan elintarvikkeen.",
"merge-food-example": "Yhdistä {food1} ja {food2} yhdeksi", "merge-food-example": "Yhdistä {food1} ja {food2} yhdeksi",
"seed-dialog-text": "Lisää tietokantaan paikallisen kielen mukaisia ruokia. Tämä luo yli 200 yleistä raaka-ainetta, joita voidaan käyttää tietokannan järjestämiseen. Raaka-aineet käännetään yhteisön toiminnan kautta.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Sinulla on jo joitakin kohteita tietokannassasi. Tämä toiminto ei sovi yhteen kaksoiskappaleita, sinun täytyy muokata niitä manuaalisesti.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Yhdistä Ruoka", "combine-food": "Yhdistä Ruoka",
"source-food": "Ruuan alkuperä", "source-food": "Ruuan alkuperä",
"target-food": "Kohderuoka", "target-food": "Kohderuoka",
@ -1213,7 +1211,7 @@
"result": "Valittu teksti tulee näkymään aiemmin valitun kentän sisällä." "result": "Valittu teksti tulee näkymään aiemmin valitun kentän sisällä."
}, },
"pan-and-zoom-mode": "Kääntö- ja zoomaustila", "pan-and-zoom-mode": "Kääntö- ja zoomaustila",
"pan-and-zoom-desc": "Select pan and zoom by clicking the icon. This mode allows to zoom inside the image and move around to make using big images easier.", "pan-and-zoom-desc": "Valitse panorointi ja zoomaus klikkaamalla kuvaketta. Tämä tila mahdollistaa zoomauksen kuvan sisällä ja liikkumisen niin, että isojen kuvien käyttö on helpompaa.",
"split-text-mode": "Jaa tekstitila", "split-text-mode": "Jaa tekstitila",
"split-modes": { "split-modes": {
"line-mode": "Rivitila (oletus)", "line-mode": "Rivitila (oletus)",
@ -1232,37 +1230,37 @@
"summary-title": "Yhteenveto", "summary-title": "Yhteenveto",
"button-label-get-summary": "Hae Yhteenveto", "button-label-get-summary": "Hae Yhteenveto",
"button-label-open-details": "Tiedot", "button-label-open-details": "Tiedot",
"info-description-data-dir-size": "Datahakemiston Koko", "info-description-data-dir-size": "Datahakemiston koko",
"info-description-log-file-size": "Lokitiedoston Koko", "info-description-log-file-size": "Lokitiedoston Koko",
"info-description-cleanable-directories": "Siivottavat Hakemistot", "info-description-cleanable-directories": "Siivottavat hakemistot",
"info-description-cleanable-images": "Siivottavat Kuvat", "info-description-cleanable-images": "Siivottavat kuvat",
"storage": { "storage": {
"title-temporary-directory": "Väliaikainen Hakemisto (.temp)", "title-temporary-directory": "Väliaikainen hakemisto (.temp)",
"title-backups-directory": "Varmuuskopiointihakemisto (varmuuskopiot)", "title-backups-directory": "Varmuuskopiointihakemisto (varmuuskopiot)",
"title-groups-directory": "Ryhmien Hakemisto (ryhmät)", "title-groups-directory": "Ryhmien hakemisto (ryhmät)",
"title-recipes-directory": "Reseptihakemisto (reseptit)", "title-recipes-directory": "Reseptihakemisto (reseptit)",
"title-user-directory": "Käyttäjähakemisto (käyttäjä)" "title-user-directory": "Käyttäjähakemisto (käyttäjä)"
}, },
"action-delete-log-files-name": "Poista Lokitiedostot", "action-delete-log-files-name": "Poista Lokitiedostot",
"action-delete-log-files-description": "Poistaa kaikki lokitiedostot", "action-delete-log-files-description": "Poistaa kaikki lokitiedostot",
"action-clean-directories-name": "Puhdista Hakemistot", "action-clean-directories-name": "Puhdista hakemistot",
"action-clean-directories-description": "Poistaa kaikki reseptikansiot, jotka eivät ole kelvollisia UUID-koodeja", "action-clean-directories-description": "Poistaa kaikki reseptikansiot, jotka eivät ole kelvollisia UUID-koodeja",
"action-clean-temporary-files-name": "Poista väliaikaiset tiedostot", "action-clean-temporary-files-name": "Poista väliaikaiset tiedostot",
"action-clean-temporary-files-description": "Poistaa kaikki tiedostot ja kansiot .temp kansiosta", "action-clean-temporary-files-description": "Poistaa kaikki tiedostot ja kansiot .temp kansiosta",
"action-clean-images-name": "Puhdista Kuvat", "action-clean-images-name": "Puhdista kuvat",
"action-clean-images-description": "Poistaa kaikki kuvat, jotka eivät pääty .webp", "action-clean-images-description": "Poistaa kaikki kuvat, jotka eivät pääty .webp",
"actions-description": "Maintenance actions are {destructive_in_bold} and should be used with caution. Performing any of these actions is {irreversible_in_bold}.", "actions-description": "Huoltotoimenpiteet ovat {destructive_in_bold} ja niitä tulisi käyttää varoen. Kaikkien näiden toimenpiteiden suorittaminen on {irreversible_in_bold}.",
"actions-description-destructive": "lopullinen", "actions-description-destructive": "tuhoisia",
"actions-description-irreversible": "peruuttamaton", "actions-description-irreversible": "peruuttamatonta",
"logs-action-refresh": "Päivitä lokit", "logs-action-refresh": "Päivitä lokit",
"logs-page-title": "Mealie- Lokit", "logs-page-title": "Mealie- Lokit",
"logs-tail-lines-label": "Tail Lines" "logs-tail-lines-label": "Loppurivit"
}, },
"mainentance": { "mainentance": {
"actions-title": "Toiminnot" "actions-title": "Toiminnot"
}, },
"ingredients-natural-language-processor": "Ingredients Natural Language Processor", "ingredients-natural-language-processor": "Ingredients Natural Language Processor",
"ingredients-natural-language-processor-explanation": "Mealie uses Conditional Random Fields (CRFs) for parsing and processing ingredients. The model used for ingredients is based off a data set of over 100,000 ingredients from a dataset compiled by the New York Times. Note that as the model is trained in English only, you may have varied results when using the model in other languages. This page is a playground for testing the model.", "ingredients-natural-language-processor-explanation": "Mealie käyttää Conditional Random Fields (CRF) ainesosien jäsentämiseen ja prosessointiin. Ainesosien osalta käytetty malli perustuu yli 100000 ainesosan aineistoon New York Timesin kokoamasta aineistosta. Huomaa, että koska malli on koulutettu vain englanniksi, mallilla voi olla vaihtelevia tuloksia, kun käytät mallia muilla kielillä. Tämä sivu on mallin testaamiseen tarkoitettu leikkipaikka.",
"ingredients-natural-language-processor-explanation-2": "Se ei ole täydellinen, mutta se tuottaa hyviä tuloksia yleensä ja on hyvä lähtökohta manuaalisesti jäsentää ainesosia yksittäisiin kenttiin. Vaihtoehtoisesti voit myös käyttää Brute-prosessori, joka käyttää kuvion täsmäystekniikkaa tunnistamaan ainesosia.", "ingredients-natural-language-processor-explanation-2": "Se ei ole täydellinen, mutta se tuottaa hyviä tuloksia yleensä ja on hyvä lähtökohta manuaalisesti jäsentää ainesosia yksittäisiin kenttiin. Vaihtoehtoisesti voit myös käyttää Brute-prosessori, joka käyttää kuvion täsmäystekniikkaa tunnistamaan ainesosia.",
"nlp": "NLP", "nlp": "NLP",
"brute": "Brute", "brute": "Brute",
@ -1279,19 +1277,19 @@
"setup": { "setup": {
"first-time-setup": "Ensiasetukset", "first-time-setup": "Ensiasetukset",
"welcome-to-mealie-get-started": "Tervetuloa Mealieen! Aloitetaan", "welcome-to-mealie-get-started": "Tervetuloa Mealieen! Aloitetaan",
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage", "already-set-up-bring-to-homepage": "Olen jo valmis, vie minut kotisivulle",
"common-settings-for-new-sites": "Here are some common settings for new sites", "common-settings-for-new-sites": "Tässä muutamia yleisiä asetuksia uusille sivustoille",
"setup-complete": "Setup Complete!", "setup-complete": "Asennus valmis.",
"here-are-a-few-things-to-help-you-get-started": "Näillä muutamilla asioilla pääset alkuun", "here-are-a-few-things-to-help-you-get-started": "Näillä muutamilla asioilla pääset alkuun",
"restore-from-v1-backup": "Onko sinulla varmuuskopio aiemmasta Mealie v1 -instanssista? Palauta se tästä.", "restore-from-v1-backup": "Onko sinulla varmuuskopio aiemmasta Mealie v1 -instanssista? Palauta se tästä.",
"manage-profile-or-get-invite-link": "Hallitse profiiliasi tai hanki kutsulinkki muille." "manage-profile-or-get-invite-link": "Hallitse profiiliasi tai hanki kutsulinkki muille."
}, },
"debug-openai-services": "Debug OpenAI Services", "debug-openai-services": "Debuggaa OpenAI-palveluita",
"debug-openai-services-description": "Use this page to debug OpenAI services. You can test your OpenAI connection and see the results here. If you have image services enabled, you can also provide an image.", "debug-openai-services-description": "Käytä tätä sivua OpenAI-palveluiden debuggaamiseen. Voit testata OpenAI-yhteytesi ja nähdä tulokset täällä. Jos kuvapalvelut ovat käytössä, voit myös antaa kuvan.",
"run-test": "Run Test", "run-test": "Suorita testi",
"test-results": "Test Results", "test-results": "Testitulokset",
"group-delete-note": "Groups with users or households cannot be deleted", "group-delete-note": "Ryhmiä, joilla on käyttäjiä tai kotitalouksia, ei voi poistaa",
"household-delete-note": "Households with users cannot be deleted" "household-delete-note": "Kotitalouksia, joissa on käyttäjiä, ei voi poistaa"
}, },
"profile": { "profile": {
"welcome-user": "👋 Tervetuloa, {0}!", "welcome-user": "👋 Tervetuloa, {0}!",
@ -1345,9 +1343,9 @@
}, },
"cookbook": { "cookbook": {
"cookbooks": "Keittokirjat", "cookbooks": "Keittokirjat",
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes, organizers, and other filters. Creating a cookbook will add an entry to the side-bar and all the recipes with the filters chosen will be displayed in the cookbook.", "description": "Keittokirjat ovat toinen tapa järjestää reseptejä luomalla poikkileikkauksia resepteistä, järjestäjistä, sekä muista suodattimista. Keittokirjan luominen lisää merkinnän sivupalkkiin, ja kaikki reseptit näkyvät keittokirjassa valittujen suodatinten mukaisesti.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households", "hide-cookbooks-from-other-households": "Piilota keittokirjat muista kotitalouksista",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar", "hide-cookbooks-from-other-households-description": "Kun käytössä, sivupalkissa näkyy vain oman kotitaloutesi keittokirjoja",
"public-cookbook": "Julkinen Keittokirja", "public-cookbook": "Julkinen Keittokirja",
"public-cookbook-description": "Julkisia keittokirjoja voidaan jakaa ei-Mealien käyttäjille, ja ne näkyvät ryhmäsi sivulla.", "public-cookbook-description": "Julkisia keittokirjoja voidaan jakaa ei-Mealien käyttäjille, ja ne näkyvät ryhmäsi sivulla.",
"filter-options": "Suodatuksen asetukset", "filter-options": "Suodatuksen asetukset",
@ -1363,25 +1361,25 @@
}, },
"query-filter": { "query-filter": {
"logical-operators": { "logical-operators": {
"and": "AND", "and": "JA",
"or": "OR" "or": "TAI"
}, },
"relational-operators": { "relational-operators": {
"equals": "equals", "equals": "on yhtä kuin",
"does-not-equal": "does not equal", "does-not-equal": "ei ole yhtä kuin",
"is-greater-than": "is greater than", "is-greater-than": "on suurempi kuin",
"is-greater-than-or-equal-to": "is greater than or equal to", "is-greater-than-or-equal-to": "on suurempi tai yhtäsuuri kuin",
"is-less-than": "is less than", "is-less-than": "on vähemmän kuin",
"is-less-than-or-equal-to": "is less than or equal to" "is-less-than-or-equal-to": "on vähemmän tai yhtäsuuri kuin"
}, },
"relational-keywords": { "relational-keywords": {
"is": "is", "is": "on",
"is-not": "is not", "is-not": "ei ole",
"is-one-of": "is one of", "is-one-of": "on yksi näistä",
"is-not-one-of": "is not one of", "is-not-one-of": "ei ole yksi näistä",
"contains-all-of": "contains all of", "contains-all-of": "sisältää kaikki nämä",
"is-like": "is like", "is-like": "on kuin",
"is-not-like": "is not like" "is-not-like": "ei ole kuin"
} }
} }
} }

View file

@ -579,7 +579,6 @@
"made-this": "Je lai cuisiné", "made-this": "Je lai cuisiné",
"how-did-it-turn-out": "Cétait bon?", "how-did-it-turn-out": "Cétait bon?",
"user-made-this": "{user} la cuisiné", "user-made-this": "{user} la cuisiné",
"last-made-date": "Cuisiné le {date}",
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.", "api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.",
"message-key": "Clé de message", "message-key": "Clé de message",
"parse": "Analyser", "parse": "Analyser",
@ -647,7 +646,6 @@
"nextStep": "Étape suivante", "nextStep": "Étape suivante",
"recipe-actions": "Actions de recette", "recipe-actions": "Actions de recette",
"parser": { "parser": {
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
"ingredient-parser": "Analyseur d'ingrédients", "ingredient-parser": "Analyseur d'ingrédients",
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.", "explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.", "alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
@ -722,7 +720,7 @@
"backup-restore": "Restaurer la sauvegarde", "backup-restore": "Restaurer la sauvegarde",
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.", "back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.", "cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
"postgresql-note": "Si vous utilisez PostGreSQL, veuillez consulter le {backup-restore-process} avant de le restaurer.", "postgresql-note": "Si vous utilisez PostgreSQL, veuillez consulter le {backup-restore-process} avant la restauration.",
"backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation", "backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation",
"irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données", "irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données",
"restore-backup": "Restaurer une sauvegarde" "restore-backup": "Restaurer une sauvegarde"
@ -1051,7 +1049,7 @@
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.", "merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.",
"merge-food-example": "Fusion de {food1} dans {food2}", "merge-food-example": "Fusion de {food1} dans {food2}",
"seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.", "seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne réconciliera pas les doublons, vous devrez les gérer manuellement.", "seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne fusionnera pas les doublons, vous devrez les gérer manuellement.",
"combine-food": "Combiner les aliments", "combine-food": "Combiner les aliments",
"source-food": "Aliment source", "source-food": "Aliment source",
"target-food": "Aliment cible", "target-food": "Aliment cible",

View file

@ -579,7 +579,6 @@
"made-this": "Je lai cuisiné", "made-this": "Je lai cuisiné",
"how-did-it-turn-out": "Cétait bon?", "how-did-it-turn-out": "Cétait bon?",
"user-made-this": "{user} la cuisiné", "user-made-this": "{user} la cuisiné",
"last-made-date": "Cuisiné le {date}",
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.", "api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.",
"message-key": "Clé de message", "message-key": "Clé de message",
"parse": "Analyser", "parse": "Analyser",
@ -647,7 +646,6 @@
"nextStep": "Étape suivante", "nextStep": "Étape suivante",
"recipe-actions": "Actions de recette", "recipe-actions": "Actions de recette",
"parser": { "parser": {
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
"ingredient-parser": "Analyseur d'ingrédients", "ingredient-parser": "Analyseur d'ingrédients",
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.", "explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.", "alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
@ -722,7 +720,7 @@
"backup-restore": "Restaurer la sauvegarde", "backup-restore": "Restaurer la sauvegarde",
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.", "back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.", "cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
"postgresql-note": "Si vous utilisez PostGreSQL, veuillez consulter le {backup-restore-process} avant de le restaurer.", "postgresql-note": "Si vous utilisez PostgreSQL, veuillez consulter le {backup-restore-process} avant la restauration.",
"backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation", "backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation",
"irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données", "irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données",
"restore-backup": "Restaurer une sauvegarde" "restore-backup": "Restaurer une sauvegarde"
@ -1051,7 +1049,7 @@
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.", "merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.",
"merge-food-example": "Fusion de {food1} dans {food2}", "merge-food-example": "Fusion de {food1} dans {food2}",
"seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.", "seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne réconciliera pas les doublons, vous devrez les gérer manuellement.", "seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne fusionnera pas les doublons, vous devrez les gérer manuellement.",
"combine-food": "Combiner les aliments", "combine-food": "Combiner les aliments",
"source-food": "Aliment source", "source-food": "Aliment source",
"target-food": "Aliment cible", "target-food": "Aliment cible",

View file

@ -579,7 +579,6 @@
"made-this": "Je lai cuisiné", "made-this": "Je lai cuisiné",
"how-did-it-turn-out": "Cétait bon?", "how-did-it-turn-out": "Cétait bon?",
"user-made-this": "{user} la cuisiné", "user-made-this": "{user} la cuisiné",
"last-made-date": "Cuisiné le {date}",
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.", "api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.",
"message-key": "Clé de message", "message-key": "Clé de message",
"parse": "Analyser", "parse": "Analyser",
@ -647,7 +646,6 @@
"nextStep": "Étape suivante", "nextStep": "Étape suivante",
"recipe-actions": "Actions de recette", "recipe-actions": "Actions de recette",
"parser": { "parser": {
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
"ingredient-parser": "Analyseur d'ingrédients", "ingredient-parser": "Analyseur d'ingrédients",
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.", "explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.", "alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
@ -722,7 +720,7 @@
"backup-restore": "Restaurer la sauvegarde", "backup-restore": "Restaurer la sauvegarde",
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.", "back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.", "cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
"postgresql-note": "Si vous utilisez PostGreSQL, veuillez consulter le {backup-restore-process} avant de le restaurer.", "postgresql-note": "Si vous utilisez PostgreSQL, veuillez consulter le {backup-restore-process} avant la restauration.",
"backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation", "backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation",
"irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données", "irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données",
"restore-backup": "Restaurer une sauvegarde" "restore-backup": "Restaurer une sauvegarde"
@ -1051,7 +1049,7 @@
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.", "merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.",
"merge-food-example": "Fusion de {food1} dans {food2}", "merge-food-example": "Fusion de {food1} dans {food2}",
"seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.", "seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne réconciliera pas les doublons, vous devrez les gérer manuellement.", "seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne fusionnera pas les doublons, vous devrez les gérer manuellement.",
"combine-food": "Combiner les aliments", "combine-food": "Combiner les aliments",
"source-food": "Aliment source", "source-food": "Aliment source",
"target-food": "Aliment cible", "target-food": "Aliment cible",

File diff suppressed because it is too large Load diff

View file

@ -15,7 +15,7 @@
"docs": "תיעוד", "docs": "תיעוד",
"download-log": "הורדת לוגים", "download-log": "הורדת לוגים",
"download-recipe-json": "ה-JSON האחרון שנקרא", "download-recipe-json": "ה-JSON האחרון שנקרא",
"github": "גיטהאב", "github": "GitHub",
"log-lines": "שורות לוג", "log-lines": "שורות לוג",
"not-demo": "לא בהדגמה", "not-demo": "לא בהדגמה",
"portfolio": "תיק עבודות", "portfolio": "תיק עבודות",
@ -579,7 +579,6 @@
"made-this": "הכנתי את זה", "made-this": "הכנתי את זה",
"how-did-it-turn-out": "איך יצא?", "how-did-it-turn-out": "איך יצא?",
"user-made-this": "{user} הכין את זה", "user-made-this": "{user} הכין את זה",
"last-made-date": "נעשה לאחרונה ב{date}",
"api-extras-description": "מתכונים נוספים הם יכולת מפתח של Mealie API. הם מאפשרים ליצור צמדי key/value בצורת JSON על מנת לקרוא אותם בתוכנת צד שלישית. תוכלו להשתמש בצמדים האלה כדי לספק מידע, לדוגמא להפעיל אוטומציות או הודעות מותאמות אישית למכשירים מסויימים.", "api-extras-description": "מתכונים נוספים הם יכולת מפתח של Mealie API. הם מאפשרים ליצור צמדי key/value בצורת JSON על מנת לקרוא אותם בתוכנת צד שלישית. תוכלו להשתמש בצמדים האלה כדי לספק מידע, לדוגמא להפעיל אוטומציות או הודעות מותאמות אישית למכשירים מסויימים.",
"message-key": "מפתח הודעה", "message-key": "מפתח הודעה",
"parse": "ניתוח", "parse": "ניתוח",
@ -647,7 +646,6 @@
"nextStep": "השלב הבא", "nextStep": "השלב הבא",
"recipe-actions": "פעולות במתכון", "recipe-actions": "פעולות במתכון",
"parser": { "parser": {
"experimental-alert-text": "Mealie משתמשת בניתוח שפה טבעית כדי לפענח וליצור יחידות ופרטי מזון בשביל המצרכים למתכון שלך. תכונה זו היא ניסיונית ועלולה לא לעבוד כמצופה. אם ברצונך לא להשתמש בתוצאות, עליך לבחור 'בטל' והשינויים שלך לא יישמרו.",
"ingredient-parser": "מפענח המרכיבים", "ingredient-parser": "מפענח המרכיבים",
"explanation": "לחיצה על 'פענח הכל' תתחיל את תהליך פענוח המרכיבים. יהיה ניתן לראות ולוודא את נכונות הפענוח כאשר הרכיבים יהיו זמינים. ציון רמת ביטחון המודל יוצג לצד כותרת הפריט. הציון הוא ממוצע הציונים של כל חלק, ולכן לא תמיד מדויק לגמרי.", "explanation": "לחיצה על 'פענח הכל' תתחיל את תהליך פענוח המרכיבים. יהיה ניתן לראות ולוודא את נכונות הפענוח כאשר הרכיבים יהיו זמינים. ציון רמת ביטחון המודל יוצג לצד כותרת הפריט. הציון הוא ממוצע הציונים של כל חלק, ולכן לא תמיד מדויק לגמרי.",
"alerts-explainer": "תופיע התראה במידה ונמצא אוכל או יחידה מתאימים שאינם נמצאים בבסיס הנתונים.", "alerts-explainer": "תופיע התראה במידה ונמצא אוכל או יחידה מתאימים שאינם נמצאים בבסיס הנתונים.",
@ -722,7 +720,7 @@
"backup-restore": "גיבוי / שחזור", "backup-restore": "גיבוי / שחזור",
"back-restore-description": "שחזור מגיבוי זה ידרוס את המידע הקיים במסד הנתונים ובספריות האתר ויחליף אותם בזה הקיים בגיבוי. {cannot-be-undone} אם השחזור יצליח, המשתמש ינותק מהמערכת.", "back-restore-description": "שחזור מגיבוי זה ידרוס את המידע הקיים במסד הנתונים ובספריות האתר ויחליף אותם בזה הקיים בגיבוי. {cannot-be-undone} אם השחזור יצליח, המשתמש ינותק מהמערכת.",
"cannot-be-undone": "פעולה זו לא בלתי הפיכה - השתמש בזהירות.", "cannot-be-undone": "פעולה זו לא בלתי הפיכה - השתמש בזהירות.",
"postgresql-note": "אם PostGreSQL בשימוש, בדוק את ה-{backup-restore-process} לפני שחזור.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "תהליך גיבוי או שחזור במדריכים", "backup-restore-process-in-the-documentation": "תהליך גיבוי או שחזור במדריכים",
"irreversible-acknowledgment": "אני מבין שהפעולה לא הפיכה, הרסנית ויכולה לגרום לאיבוד מידע", "irreversible-acknowledgment": "אני מבין שהפעולה לא הפיכה, הרסנית ויכולה לגרום לאיבוד מידע",
"restore-backup": "שחזר גיבוי" "restore-backup": "שחזר גיבוי"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "צירוף של המאכלים שנבחרו יאחד את אוכל המקור ואוכל היעד לפריט אוכל אחד. אוכל המקור ימחק וכל ההפניות / הייחוסים אליו יעודכנו ויופנו לאוכל היעד.", "merge-dialog-text": "צירוף של המאכלים שנבחרו יאחד את אוכל המקור ואוכל היעד לפריט אוכל אחד. אוכל המקור ימחק וכל ההפניות / הייחוסים אליו יעודכנו ויופנו לאוכל היעד.",
"merge-food-example": "ממזג את {food1} לתוך {food2}", "merge-food-example": "ממזג את {food1} לתוך {food2}",
"seed-dialog-text": "אכלס את מסד הנתונים עם אוכל בהתבסס על השפה המקומית שלך. הפעולה תיצור +200 מאכלים נפוצים שיכולים לשמש לארגון מסד הנתונים. מאכלים מתורגמים על ידי מאמצי הקהילה.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "מסד הנתונים שלך כבר מכיל מספר פריטים. פעולה זו אינה מטפלת בכפילויות, יהיה צורך לפתור זאת באופן ידני.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "שילוב אוכל", "combine-food": "שילוב אוכל",
"source-food": "אוכל מקור", "source-food": "אוכל מקור",
"target-food": "אוכל יעד", "target-food": "אוכל יעד",

View file

@ -15,7 +15,7 @@
"docs": "Dokumenti", "docs": "Dokumenti",
"download-log": "Preuzmi zapisnik", "download-log": "Preuzmi zapisnik",
"download-recipe-json": "Posljednji prikupljeni JSON", "download-recipe-json": "Posljednji prikupljeni JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Bilježi zapisnik", "log-lines": "Bilježi zapisnik",
"not-demo": "Nije Demo", "not-demo": "Nije Demo",
"portfolio": "Portfelj", "portfolio": "Portfelj",
@ -579,7 +579,6 @@
"made-this": "Napravio/la sam ovo", "made-this": "Napravio/la sam ovo",
"how-did-it-turn-out": "Kako je ispalo?", "how-did-it-turn-out": "Kako je ispalo?",
"user-made-this": "{user} je napravio/la ovo", "user-made-this": "{user} je napravio/la ovo",
"last-made-date": "Zadnji put napravljeno {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Ključ poruke", "message-key": "Ključ poruke",
"parse": "Razluči (parsiraj)", "parse": "Razluči (parsiraj)",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Sigurnosno kopiranje/vraćanje", "backup-restore": "Sigurnosno kopiranje/vraćanje",
"back-restore-description": "Vraćanje ove sigurnosne kopije će prepisati sve trenutne podatke u vašoj bazi podataka i direktoriju podataka i zamijeniti ih sadržajem ove sigurnosne kopije. Ova radnja je {ne-može-se-povratiti}. Ako se vraćanje uspješno izvrši, bit ćete odjavljeni iz sustava.", "back-restore-description": "Vraćanje ove sigurnosne kopije će prepisati sve trenutne podatke u vašoj bazi podataka i direktoriju podataka i zamijeniti ih sadržajem ove sigurnosne kopije. Ova radnja je {ne-može-se-povratiti}. Ako se vraćanje uspješno izvrši, bit ćete odjavljeni iz sustava.",
"cannot-be-undone": "Ova radnja ne može se poništiti - koristite je oprezno.", "cannot-be-undone": "Ova radnja ne može se poništiti - koristite je oprezno.",
"postgresql-note": "Ako koristite PostGreSQL, molim pregledajte {backup-restore-process} prije obnove.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "postupak sigurnosne kopije/obnove opisan je u dokumentaciji", "backup-restore-process-in-the-documentation": "postupak sigurnosne kopije/obnove opisan je u dokumentaciji",
"irreversible-acknowledgment": "Razumijem da je ova radnja nepovratna, destruktivna i može uzrokovati gubitak podataka", "irreversible-acknowledgment": "Razumijem da je ova radnja nepovratna, destruktivna i može uzrokovati gubitak podataka",
"restore-backup": "Vrati sigurnosnu kopiju" "restore-backup": "Vrati sigurnosnu kopiju"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Spajanje odabrane hrane će spojiti izvornu hranu i ciljanu hranu u jednu hranu. Izvorna hrana će biti izbrisana, a sve reference na izvornu hranu će biti ažurirane kako bi pokazivale na ciljanu hranu.", "merge-dialog-text": "Spajanje odabrane hrane će spojiti izvornu hranu i ciljanu hranu u jednu hranu. Izvorna hrana će biti izbrisana, a sve reference na izvornu hranu će biti ažurirane kako bi pokazivale na ciljanu hranu.",
"merge-food-example": "Spajanje {food1} u {food2}", "merge-food-example": "Spajanje {food1} u {food2}",
"seed-dialog-text": "Držite bazu podataka sa hranom na temelju vašeg lokalnog jezika. Time će se stvoriti 200+ uobičajenih namirnica koje se mogu koristiti za organiziranje vaše baze podataka. Prijevodi namirnica se ostvaruju kroz zajednički napor.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Već imate neke stavke u svojoj bazi podataka. Ova radnja neće pomiriti duplikate, morat ćete ih ručno korigirati.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Kombiniraj Hranu", "combine-food": "Kombiniraj Hranu",
"source-food": "Izvor Hrane", "source-food": "Izvor Hrane",
"target-food": "Ciljana Namirnica", "target-food": "Ciljana Namirnica",

View file

@ -15,7 +15,7 @@
"docs": "Dokumentáció", "docs": "Dokumentáció",
"download-log": "Napló letöltése", "download-log": "Napló letöltése",
"download-recipe-json": "Utoljára letöltött JSON", "download-recipe-json": "Utoljára letöltött JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Napló sorok", "log-lines": "Napló sorok",
"not-demo": "Nem Demó", "not-demo": "Nem Demó",
"portfolio": "Portfólió", "portfolio": "Portfólió",
@ -579,7 +579,6 @@
"made-this": "Elkészítettem ezt", "made-this": "Elkészítettem ezt",
"how-did-it-turn-out": "Hogyan sikerült?", "how-did-it-turn-out": "Hogyan sikerült?",
"user-made-this": "ezt {user} készítette el", "user-made-this": "ezt {user} készítette el",
"last-made-date": "Utoljára elkészítve {date}",
"api-extras-description": "A receptek extrái a Mealie API egyik legfontosabb szolgáltatása. Lehetővé teszik, hogy egyéni JSON kulcs/érték párokat hozzon létre egy receptben, amelyekre harmadik féltől származó alkalmazásokból hivatkozhat. Ezeket a kulcsokat információszolgáltatásra használhatja, például automatizmusok vagy egyéni üzenetek indítására, amelyeket a kívánt eszközre küldhet.", "api-extras-description": "A receptek extrái a Mealie API egyik legfontosabb szolgáltatása. Lehetővé teszik, hogy egyéni JSON kulcs/érték párokat hozzon létre egy receptben, amelyekre harmadik féltől származó alkalmazásokból hivatkozhat. Ezeket a kulcsokat információszolgáltatásra használhatja, például automatizmusok vagy egyéni üzenetek indítására, amelyeket a kívánt eszközre küldhet.",
"message-key": "Üzenetkulcs", "message-key": "Üzenetkulcs",
"parse": "Előkészítés", "parse": "Előkészítés",
@ -647,7 +646,6 @@
"nextStep": "Következő lépés", "nextStep": "Következő lépés",
"recipe-actions": "Receptekkel kapcsolatos tevékenységek", "recipe-actions": "Receptekkel kapcsolatos tevékenységek",
"parser": { "parser": {
"experimental-alert-text": "A Mealie természetes nyelvi feldolgozást használ a recept összetevőinek elemzésére, az egységek és az élelmiszerelemek létrehozására. Ez a funkció kísérleti jellegű, és előfordulhat, hogy nem mindig működik az elvárt módon. Ha nem szeretné használni az elemzett eredményeket, válassza a 'Mégse' lehetőséget, és a módosítások nem kerülnek mentésre.",
"ingredient-parser": "Hozzávaló elemző", "ingredient-parser": "Hozzávaló elemző",
"explanation": "A hozzávalók elemzőjének használatához kattintson a 'Parse All' gombra a folyamat elindításához. Amint a feldolgozott hozzávalók elérhetővé válnak, áttekintheti az elemeket, és ellenőrizheti, hogy azok helyesen lettek-e elemezve. A modell megbízhatósági pontszáma az elem címének jobb oldalán jelenik meg. Ez a pontszám az összes egyéni pontszám átlaga, és nem biztos, hogy mindig teljesen pontos.", "explanation": "A hozzávalók elemzőjének használatához kattintson a 'Parse All' gombra a folyamat elindításához. Amint a feldolgozott hozzávalók elérhetővé válnak, áttekintheti az elemeket, és ellenőrizheti, hogy azok helyesen lettek-e elemezve. A modell megbízhatósági pontszáma az elem címének jobb oldalán jelenik meg. Ez a pontszám az összes egyéni pontszám átlaga, és nem biztos, hogy mindig teljesen pontos.",
"alerts-explainer": "Figyelmeztetések jelennek meg, ha talál egy megfelelő élelmiszert vagy egységet, de az nem létezik az adatbázisban.", "alerts-explainer": "Figyelmeztetések jelennek meg, ha talál egy megfelelő élelmiszert vagy egységet, de az nem létezik az adatbázisban.",
@ -722,7 +720,7 @@
"backup-restore": "Biztonsági Mentés/Visszaállítás", "backup-restore": "Biztonsági Mentés/Visszaállítás",
"back-restore-description": "A biztonsági mentés visszaállítása felülírja az adatbázisban és az adatkönyvtárban lévő összes aktuális adatot, és a biztonsági mentés tartalmával helyettesíti azokat. {cannot-be-undone} Ha a visszaállítás sikeres, akkor a rendszer kilépteti Önt.", "back-restore-description": "A biztonsági mentés visszaállítása felülírja az adatbázisban és az adatkönyvtárban lévő összes aktuális adatot, és a biztonsági mentés tartalmával helyettesíti azokat. {cannot-be-undone} Ha a visszaállítás sikeres, akkor a rendszer kilépteti Önt.",
"cannot-be-undone": "Ezt a műveletet visszavonható - óvatosan használja.", "cannot-be-undone": "Ezt a műveletet visszavonható - óvatosan használja.",
"postgresql-note": "Ha PostGreSQL-t használ, kérjük, a visszaállítás előtt tekintse át a {backup-restore-process}-t.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "biztonsági mentés/visszaállítás folyamata a dokumentációban", "backup-restore-process-in-the-documentation": "biztonsági mentés/visszaállítás folyamata a dokumentációban",
"irreversible-acknowledgment": "Tudomásul veszem, hogy ez a művelet visszafordíthatatlan, helyrehozhatatlan, és adatvesztéssel járhat", "irreversible-acknowledgment": "Tudomásul veszem, hogy ez a művelet visszafordíthatatlan, helyrehozhatatlan, és adatvesztéssel járhat",
"restore-backup": "Biztonsági mentés visszaállítása" "restore-backup": "Biztonsági mentés visszaállítása"

View file

@ -15,7 +15,7 @@
"docs": "Docs", "docs": "Docs",
"download-log": "Download Log", "download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON", "download-recipe-json": "Last Scraped JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Log Lines", "log-lines": "Log Lines",
"not-demo": "Not Demo", "not-demo": "Not Demo",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -45,24 +45,24 @@
"category-filter": "Category Filter", "category-filter": "Category Filter",
"category-update-failed": "Category update failed", "category-update-failed": "Category update failed",
"category-updated": "Category updated", "category-updated": "Category updated",
"uncategorized-count": "Uncategorized {count}", "uncategorized-count": "Óflokkað {count}",
"create-a-category": "Create a Category", "create-a-category": "Búa til viðburð",
"category-name": "Category Name", "category-name": "Heiti flokks",
"category": "Category" "category": "Flokkur"
}, },
"events": { "events": {
"apprise-url": "Apprise URL", "apprise-url": "Apprise URL",
"database": "Database", "database": "",
"delete-event": "Delete Event", "delete-event": "Eyða viðburði",
"event-delete-confirmation": "Are you sure you want to delete this event?", "event-delete-confirmation": "Ertu viss um að þú viljir eyða þessum viðburði?",
"event-deleted": "Event Deleted", "event-deleted": "Viðburði eytt",
"event-updated": "Event Updated", "event-updated": "Viðburður uppfærður",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.", "new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!", "new-version": "Ný útgáfa fáanleg!",
"notification": "Notification", "notification": "Tilkynning",
"refresh": "Refresh", "refresh": "Endurhlaða",
"scheduled": "Scheduled", "scheduled": "Áætlað",
"something-went-wrong": "Something Went Wrong!", "something-went-wrong": "Eitthvað fór úrskeiðis!",
"subscribed-events": "Subscribed Events", "subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent", "test-message-sent": "Test Message Sent",
"message-sent": "Message Sent", "message-sent": "Message Sent",
@ -104,13 +104,13 @@
"failed-count": "Failed: {count}", "failed-count": "Failed: {count}",
"failure-uploading-file": "Failure uploading file", "failure-uploading-file": "Failure uploading file",
"favorites": "Favorites", "favorites": "Favorites",
"field-required": "Field Required", "field-required": "Reitur nauðsynlegur",
"file-folder-not-found": "File/folder not found", "file-folder-not-found": "Skrá/mappe finnst ekki",
"file-uploaded": "File uploaded", "file-uploaded": "Skrá",
"filter": "Filter", "filter": "Sía",
"friday": "Friday", "friday": "Föstudagur",
"general": "General", "general": "Almennt",
"get": "Get", "get": "Sækja",
"home": "Home", "home": "Home",
"image": "Image", "image": "Image",
"image-upload-failed": "Image upload failed", "image-upload-failed": "Image upload failed",
@ -579,7 +579,6 @@
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Backup Restore", "backup-restore": "Backup Restore",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.", "cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore process in the documentation", "backup-restore-process-in-the-documentation": "backup/restore process in the documentation",
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss", "irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
"restore-backup": "Restore Backup" "restore-backup": "Restore Backup"

View file

@ -517,7 +517,7 @@
"saturated-fat-content": "Grassi saturi", "saturated-fat-content": "Grassi saturi",
"save-recipe-before-use": "Salva la ricetta prima dell'uso", "save-recipe-before-use": "Salva la ricetta prima dell'uso",
"section-title": "Titolo Sezione", "section-title": "Titolo Sezione",
"servings": "Portate", "servings": "Porzioni",
"serves-amount": "Porzioni {amount}", "serves-amount": "Porzioni {amount}",
"share-recipe-message": "Volevo condividere la mia {0} ricetta con te.", "share-recipe-message": "Volevo condividere la mia {0} ricetta con te.",
"show-nutrition-values": "Mostra Valori Nutrizionali", "show-nutrition-values": "Mostra Valori Nutrizionali",
@ -546,9 +546,9 @@
"failed-to-add-recipes-to-list": "Impossibile aggiungere la ricetta alla lista", "failed-to-add-recipes-to-list": "Impossibile aggiungere la ricetta alla lista",
"failed-to-add-recipe-to-mealplan": "Impossibile aggiungere la ricetta al piano alimentare", "failed-to-add-recipe-to-mealplan": "Impossibile aggiungere la ricetta al piano alimentare",
"failed-to-add-to-list": "Errore durante l'aggiunta alla lista", "failed-to-add-to-list": "Errore durante l'aggiunta alla lista",
"yield": "Porzioni", "yield": "Quantità prodotta",
"yields-amount-with-text": "Rendimenti {amount} {text}", "yields-amount-with-text": "Quantità prodotta: {amount} {text}",
"yield-text": "Testo di rendimento", "yield-text": "Unità della quantità prodotta",
"quantity": "Quantità", "quantity": "Quantità",
"choose-unit": "Scegli Unità", "choose-unit": "Scegli Unità",
"press-enter-to-create": "Premi invio per creare", "press-enter-to-create": "Premi invio per creare",
@ -579,7 +579,6 @@
"made-this": "L'Ho Preparato", "made-this": "L'Ho Preparato",
"how-did-it-turn-out": "Come è venuto?", "how-did-it-turn-out": "Come è venuto?",
"user-made-this": "{user} l'ha preparato", "user-made-this": "{user} l'ha preparato",
"last-made-date": "Ultima Preparazione {date}",
"api-extras-description": "Le opzioni extra delle ricette sono una caratteristica fondamentale dell'API Mealie. Consentono di creare json personalizzati con coppie di chiavi/valore all'interno di una ricetta a cui fare riferimento tramite applicazioni terze. È possibile utilizzare queste chiavi per inserire informazioni, per esempio per attivare automazioni oppure per inoltrare messaggi personalizzati al dispositivo desiderato.", "api-extras-description": "Le opzioni extra delle ricette sono una caratteristica fondamentale dell'API Mealie. Consentono di creare json personalizzati con coppie di chiavi/valore all'interno di una ricetta a cui fare riferimento tramite applicazioni terze. È possibile utilizzare queste chiavi per inserire informazioni, per esempio per attivare automazioni oppure per inoltrare messaggi personalizzati al dispositivo desiderato.",
"message-key": "Chiave Messaggio", "message-key": "Chiave Messaggio",
"parse": "Analizza", "parse": "Analizza",
@ -647,7 +646,6 @@
"nextStep": "Passo successivo", "nextStep": "Passo successivo",
"recipe-actions": "Azioni Ricetta", "recipe-actions": "Azioni Ricetta",
"parser": { "parser": {
"experimental-alert-text": "Mealie utilizza l'elaborazione del linguaggio naturale per analizzare e creare unità e prodotti alimentari per i vostri ingredienti di ricetta. Questa funzione è sperimentale e potrebbe non funzionare sempre come previsto. Se preferisci non usare i risultati analizzati, puoi selezionare 'Annulla' e le tue modifiche non saranno salvate.",
"ingredient-parser": "Analizzatore ingredienti", "ingredient-parser": "Analizzatore ingredienti",
"explanation": "Per utilizzare l'analizzatore degli ingredienti, fare clic sul pulsante 'Analizza tutto' per avviare il processo. Una volta che gli ingredienti elaborati saranno disponibili, sarà possibile rivedere gli elementi e verificare che siano stati analizzati correttamente. Il punteggio di confidenza del modello viene visualizzato alla destra del titolo dell'elemento. Questo punteggio è una media di tutti i singoli punteggi e potrebbe non essere sempre completamente accurato.", "explanation": "Per utilizzare l'analizzatore degli ingredienti, fare clic sul pulsante 'Analizza tutto' per avviare il processo. Una volta che gli ingredienti elaborati saranno disponibili, sarà possibile rivedere gli elementi e verificare che siano stati analizzati correttamente. Il punteggio di confidenza del modello viene visualizzato alla destra del titolo dell'elemento. Questo punteggio è una media di tutti i singoli punteggi e potrebbe non essere sempre completamente accurato.",
"alerts-explainer": "Gli avvisi verranno visualizzati se si trova un prodotto o un'unità corrispondente ma non esiste nel database.", "alerts-explainer": "Gli avvisi verranno visualizzati se si trova un prodotto o un'unità corrispondente ma non esiste nel database.",
@ -722,7 +720,7 @@
"backup-restore": "Ripristina backup", "backup-restore": "Ripristina backup",
"back-restore-description": "Il ripristino di questo backup sovrascriverà tutti i dati correnti nel database e nella directory dei dati e li sostituirà con il contenuto di questo backup. {cannot-be-undone} Se il ripristino avrà successo, sarai disconnesso.", "back-restore-description": "Il ripristino di questo backup sovrascriverà tutti i dati correnti nel database e nella directory dei dati e li sostituirà con il contenuto di questo backup. {cannot-be-undone} Se il ripristino avrà successo, sarai disconnesso.",
"cannot-be-undone": "Questa azione non può essere annullata - usa con cautela.", "cannot-be-undone": "Questa azione non può essere annullata - usa con cautela.",
"postgresql-note": "Se stai utilizzando PostGreSQL, controlla il {backup-restore-process} prima di ripristinarlo.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "processo di backup/restore nella documentazione", "backup-restore-process-in-the-documentation": "processo di backup/restore nella documentazione",
"irreversible-acknowledgment": "Capisco che questa azione è irreversibile, distruttiva e può causare la perdita di dati", "irreversible-acknowledgment": "Capisco che questa azione è irreversibile, distruttiva e può causare la perdita di dati",
"restore-backup": "Ripristina Backup" "restore-backup": "Ripristina Backup"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Combinando gli alimenti selezionati, l'alimento di origine e l'alimento di destinazione verranno uniti in un unico alimento. L'alimento di origine verrà eliminato e tutti i riferimenti all'alimento di origine verranno aggiornati per puntare all'alimento di destinazione.", "merge-dialog-text": "Combinando gli alimenti selezionati, l'alimento di origine e l'alimento di destinazione verranno uniti in un unico alimento. L'alimento di origine verrà eliminato e tutti i riferimenti all'alimento di origine verranno aggiornati per puntare all'alimento di destinazione.",
"merge-food-example": "Unione di {food1} in {food2}", "merge-food-example": "Unione di {food1} in {food2}",
"seed-dialog-text": "Inizializza il database con alimenti in base alla tua lingua locale. Questo creerà oltre 200 alimenti comuni che possono essere utilizzati per organizzare il tuo database. Gli alimenti sono tradotti grazie al contributo della comunità di utenti.", "seed-dialog-text": "Inizializzare il database con alimenti della propria lingua locale. Ciò creerà oltre 200 alimenti comuni che potranno essere usati per organizzare il proprio database. Gli alimenti vengono tradotti grazie al contributo della comunità degli utenti.",
"seed-dialog-warning": "Hai già alcuni elementi nel tuo database. Questa azione non riconcilierà i duplicati, dovrai gestirli manualmente.", "seed-dialog-warning": "Ci sono già alcuni elementi nel database. Questa azione non unificherà i duplicati, bisognerà gestirli manualmente.",
"combine-food": "Combina Alimenti", "combine-food": "Combina Alimenti",
"source-food": "Alimento di Origine", "source-food": "Alimento di Origine",
"target-food": "Alimento di Destinazione", "target-food": "Alimento di Destinazione",

View file

@ -579,7 +579,6 @@
"made-this": "これを作りました", "made-this": "これを作りました",
"how-did-it-turn-out": "どうなりましたか?", "how-did-it-turn-out": "どうなりましたか?",
"user-made-this": "{user} がこれを作りました", "user-made-this": "{user} がこれを作りました",
"last-made-date": "最後は {date} に作りました",
"api-extras-description": "レシピの追加機能はMealie APIの主な機能です。 サードパーティアプリから参照するために、レシピ内にカスタムJSONキー/値のペアを作成することができます。 これらのキーを使用して情報を提供することができます。例えば、自動化をトリガーしたり、カスタムメッセージをお使いのデバイスにリレーするなどです。", "api-extras-description": "レシピの追加機能はMealie APIの主な機能です。 サードパーティアプリから参照するために、レシピ内にカスタムJSONキー/値のペアを作成することができます。 これらのキーを使用して情報を提供することができます。例えば、自動化をトリガーしたり、カスタムメッセージをお使いのデバイスにリレーするなどです。",
"message-key": "メッセージキー", "message-key": "メッセージキー",
"parse": "解析", "parse": "解析",
@ -647,7 +646,6 @@
"nextStep": "次のステップ", "nextStep": "次のステップ",
"recipe-actions": "レシピ操作", "recipe-actions": "レシピ操作",
"parser": { "parser": {
"experimental-alert-text": "Mealieは、自然言語処理を使用して、レシピ成分のための単位や食品を解析し、作成します。 この機能は実験的であり、常に期待どおりに動作するとは限りません。 解析結果を使用したくない場合は、「キャンセル」を選択することができ、変更内容は保存されません。",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "Ingredient Parserを使用するには、「すべて解析」ボタンをクリックしてプロセスを開始します。 処理された原材料が利用可能になったら、項目を確認し、それらが正しく解析されたことを確認できます。 アイテムタイトルの右側にモデルの信頼度が表示されます。 このスコアは、すべての個々のスコアの平均であり、常に完全に正確であるとは限りません。", "explanation": "Ingredient Parserを使用するには、「すべて解析」ボタンをクリックしてプロセスを開始します。 処理された原材料が利用可能になったら、項目を確認し、それらが正しく解析されたことを確認できます。 アイテムタイトルの右側にモデルの信頼度が表示されます。 このスコアは、すべての個々のスコアの平均であり、常に完全に正確であるとは限りません。",
"alerts-explainer": "一致する食品または単位が見つかってもデータベースに存在しない場合は、アラートが表示されます。", "alerts-explainer": "一致する食品または単位が見つかってもデータベースに存在しない場合は、アラートが表示されます。",
@ -722,7 +720,7 @@
"backup-restore": "バックアップと復元", "backup-restore": "バックアップと復元",
"back-restore-description": "このバックアップを復元すると、データベースとデータディレクトリ内のすべての現在のデータが上書きされ、このバックアップの内容に置き換えられます。 {cannot-be-undone} 復元が成功するとログアウトされます。", "back-restore-description": "このバックアップを復元すると、データベースとデータディレクトリ内のすべての現在のデータが上書きされ、このバックアップの内容に置き換えられます。 {cannot-be-undone} 復元が成功するとログアウトされます。",
"cannot-be-undone": "この操作は元に戻せません - 注意してください。", "cannot-be-undone": "この操作は元に戻せません - 注意してください。",
"postgresql-note": "PostGreSQLを使用している場合は、復元する前に {backup-restore-process} を確認してください。", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "ドキュメント内のバックアップ/復元プロセス", "backup-restore-process-in-the-documentation": "ドキュメント内のバックアップ/復元プロセス",
"irreversible-acknowledgment": "このアクションは不可逆的で破壊的で、データ損失を引き起こす可能性があることを理解しています", "irreversible-acknowledgment": "このアクションは不可逆的で破壊的で、データ損失を引き起こす可能性があることを理解しています",
"restore-backup": "バックアップから復元" "restore-backup": "バックアップから復元"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "選択した食品を組み合わせると、ソース食品とターゲット食品が1つの食品に統合されます。 ソース食品は削除され、ソース食品への参照のすべてがターゲット食品を指し示すように更新されます。", "merge-dialog-text": "選択した食品を組み合わせると、ソース食品とターゲット食品が1つの食品に統合されます。 ソース食品は削除され、ソース食品への参照のすべてがターゲット食品を指し示すように更新されます。",
"merge-food-example": "{food1} を {food2} に統合", "merge-food-example": "{food1} を {food2} に統合",
"seed-dialog-text": "あなたの地元の言語に基づいた食品をデータベースにシードします。これにより、データベースの整理に使用できる200以上の一般的な食品が作成されます。食品はコミュニティの取り組みによって翻訳されます。", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "あなたのデータベースにはすでにいくつかの項目があります。このアクションは重複を照合しませんので、手動で管理する必要があります。", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "食品を組み合わせる", "combine-food": "食品を組み合わせる",
"source-food": "元の食品", "source-food": "元の食品",
"target-food": "ターゲットの食品", "target-food": "ターゲットの食品",

View file

@ -15,7 +15,7 @@
"docs": "문서", "docs": "문서",
"download-log": "다운로드 기록", "download-log": "다운로드 기록",
"download-recipe-json": "마지막으로 불러온 JSON", "download-recipe-json": "마지막으로 불러온 JSON",
"github": "Github", "github": "GitHub",
"log-lines": "로그 줄", "log-lines": "로그 줄",
"not-demo": "데모 아님", "not-demo": "데모 아님",
"portfolio": "포트폴리오", "portfolio": "포트폴리오",
@ -579,7 +579,6 @@
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
@ -647,7 +646,6 @@
"nextStep": "다음 단계", "nextStep": "다음 단계",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "백업/복원", "backup-restore": "백업/복원",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.", "cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore process in the documentation", "backup-restore-process-in-the-documentation": "backup/restore process in the documentation",
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss", "irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
"restore-backup": "Restore Backup" "restore-backup": "Restore Backup"

View file

@ -15,7 +15,7 @@
"docs": "Dokumentacija", "docs": "Dokumentacija",
"download-log": "Atsisiųsti žurnalą", "download-log": "Atsisiųsti žurnalą",
"download-recipe-json": "Paskutinis nuskaitytas \"JSON\"", "download-recipe-json": "Paskutinis nuskaitytas \"JSON\"",
"github": "Github", "github": "GitHub",
"log-lines": "Žurnalo eilutės", "log-lines": "Žurnalo eilutės",
"not-demo": "Not Demo", "not-demo": "Not Demo",
"portfolio": "Darbai", "portfolio": "Darbai",
@ -579,7 +579,6 @@
"made-this": "Aš tai gaminau", "made-this": "Aš tai gaminau",
"how-did-it-turn-out": "Kaip tai pavyko?", "how-did-it-turn-out": "Kaip tai pavyko?",
"user-made-this": "{user} gamino šį patiekalą", "user-made-this": "{user} gamino šį patiekalą",
"last-made-date": "Paskutinį kartą gaminta {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Žinutės raktas", "message-key": "Žinutės raktas",
"parse": "Nuskaityti", "parse": "Nuskaityti",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Atkurti iš atsarginės kopijos", "backup-restore": "Atkurti iš atsarginės kopijos",
"back-restore-description": "Atkūrimas ištrina visus šiuo metu duomenų bazėje ir duomenų archyve esančius duomenis ir perrašo juos į duomenis iš atsarginės kopijos. {cannot-be-undone} Jei atkūrimas bus sėkmingas, būsite atjungti nuo savo paskyros.", "back-restore-description": "Atkūrimas ištrina visus šiuo metu duomenų bazėje ir duomenų archyve esančius duomenis ir perrašo juos į duomenis iš atsarginės kopijos. {cannot-be-undone} Jei atkūrimas bus sėkmingas, būsite atjungti nuo savo paskyros.",
"cannot-be-undone": "Atsargiai - šis veiksmas negrįžtamas.", "cannot-be-undone": "Atsargiai - šis veiksmas negrįžtamas.",
"postgresql-note": "Jei naudojate PostgreSQL, prašome peržiūrėti {backup-restore-process} prieš atkuriant.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "atsarginio kopijavimo/atkūrimo procesą dokumentacijoje", "backup-restore-process-in-the-documentation": "atsarginio kopijavimo/atkūrimo procesą dokumentacijoje",
"irreversible-acknowledgment": "Suprantu, jog šis veiksmas bus neatstatomas, destruktyvus ir gali sukelti duomenų praradimus", "irreversible-acknowledgment": "Suprantu, jog šis veiksmas bus neatstatomas, destruktyvus ir gali sukelti duomenų praradimus",
"restore-backup": "Atkurti iš atsarginės kopijos" "restore-backup": "Atkurti iš atsarginės kopijos"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Pasirinktų produktų sujungimas apibendrins pirminį ir antrinį produktus į vieną produktą. Pirminis produktas bus ištrintas, o visi jo panaudojimai bus pakeisti antriniu produktu.", "merge-dialog-text": "Pasirinktų produktų sujungimas apibendrins pirminį ir antrinį produktus į vieną produktą. Pirminis produktas bus ištrintas, o visi jo panaudojimai bus pakeisti antriniu produktu.",
"merge-food-example": "Sujungiama {food1} su {food2}", "merge-food-example": "Sujungiama {food1} su {food2}",
"seed-dialog-text": "Pradėkite pildyti duomenų bazę produktų pavadinimais savo vietine kalba. Bus sukurta apie 200 dažniausių produktų, kuriuos galėsite panaudoti savo duomenų bazės tvarkymui. Produktų pavadinimai verčiami bendruomenės pastangomis.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Kai kuriuos elementus jau turite savo duomenų bazėje. Šis veiksmas nesutvarkys dublikatų, turėsite juos tvarkyti rankiniu būdu.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Sujungti produktus", "combine-food": "Sujungti produktus",
"source-food": "Pirminis produktas", "source-food": "Pirminis produktas",
"target-food": "Antrinis produktas", "target-food": "Antrinis produktas",

View file

@ -15,7 +15,7 @@
"docs": "Dokumentācija", "docs": "Dokumentācija",
"download-log": "Lejupielādēt žurnālu", "download-log": "Lejupielādēt žurnālu",
"download-recipe-json": "Pēdējo reizi nokasītais JSON", "download-recipe-json": "Pēdējo reizi nokasītais JSON",
"github": "Github", "github": "GitHub",
"log-lines": "žurnāla līnijas", "log-lines": "žurnāla līnijas",
"not-demo": "Nav demo", "not-demo": "Nav demo",
"portfolio": "Portfelis", "portfolio": "Portfelis",
@ -579,7 +579,6 @@
"made-this": "Es to pagatavoju", "made-this": "Es to pagatavoju",
"how-did-it-turn-out": "Kā tas izrādījās?", "how-did-it-turn-out": "Kā tas izrādījās?",
"user-made-this": "{user}izdarīja šo", "user-made-this": "{user}izdarīja šo",
"last-made-date": "Pēdējo reizi izgatavots {date}",
"api-extras-description": "Recepšu ekstras ir galvenā Mealie API iezīme. Tie ļauj jums izveidot pielāgotus JSON atslēgu/vērtību pārus receptē, lai atsaucotos no trešo pušu lietojumprogrammām. Varat izmantot šos taustiņus, lai sniegtu informāciju, piemēram, aktivizētu automatizāciju vai pielāgotus ziņojumus, lai tos pārsūtītu uz vēlamo ierīci.", "api-extras-description": "Recepšu ekstras ir galvenā Mealie API iezīme. Tie ļauj jums izveidot pielāgotus JSON atslēgu/vērtību pārus receptē, lai atsaucotos no trešo pušu lietojumprogrammām. Varat izmantot šos taustiņus, lai sniegtu informāciju, piemēram, aktivizētu automatizāciju vai pielāgotus ziņojumus, lai tos pārsūtītu uz vēlamo ierīci.",
"message-key": "Ziņojuma atslēga", "message-key": "Ziņojuma atslēga",
"parse": "Parsēšana", "parse": "Parsēšana",
@ -647,7 +646,6 @@
"nextStep": "Nākamais solis", "nextStep": "Nākamais solis",
"recipe-actions": "Recepšu darbības", "recipe-actions": "Recepšu darbības",
"parser": { "parser": {
"experimental-alert-text": "Mealie izmanto dabiskās valodas apstrādi, lai parsētu un izveidotu vienības un pārtikas produktus jūsu receptes sastāvdaļām. Šī funkcija ir eksperimentāla un ne vienmēr var darboties, kā paredzēts. Ja nevēlaties izmantot parsētos rezultātus, varat izvēlēties “Atcelt”, un jūsu izmaiņas netiks saglabātas.",
"ingredient-parser": "Sastāvdaļu parsētājs", "ingredient-parser": "Sastāvdaļu parsētājs",
"explanation": "Lai izmantotu sastāvdaļu parsētāju, noklikšķiniet uz pogas “Parsēt visu”, lai sāktu procesu. Kad apstrādātās sastāvdaļas ir pieejamas, varat pārskatīt preces un pārbaudīt, vai tie ir pareizi parsēti. Modeļa ticamības rādītājs tiek parādīts labajā pusē no vienuma nosaukuma. Šis rādītājs ir visu individuālo punktu vidējais rādītājs, un tas ne vienmēr var būt pilnīgi precīzs.", "explanation": "Lai izmantotu sastāvdaļu parsētāju, noklikšķiniet uz pogas “Parsēt visu”, lai sāktu procesu. Kad apstrādātās sastāvdaļas ir pieejamas, varat pārskatīt preces un pārbaudīt, vai tie ir pareizi parsēti. Modeļa ticamības rādītājs tiek parādīts labajā pusē no vienuma nosaukuma. Šis rādītājs ir visu individuālo punktu vidējais rādītājs, un tas ne vienmēr var būt pilnīgi precīzs.",
"alerts-explainer": "Brīdinājumi tiks parādīti, ja tiks atrasts atbilstošs pārtikas produkts vai vienība, bet datu bāzē tā nepastāv.", "alerts-explainer": "Brīdinājumi tiks parādīti, ja tiks atrasts atbilstošs pārtikas produkts vai vienība, bet datu bāzē tā nepastāv.",
@ -722,7 +720,7 @@
"backup-restore": "Dublēšanas atjaunošana", "backup-restore": "Dublēšanas atjaunošana",
"back-restore-description": "Atjaunojot šo dublējumu, tiks pārrakstīti visi pašreizējie dati jūsu datu bāzē un datu direktorijā un aizstāti tos ar šīs dublējuma saturu. {cannot-be-undone}Ja atjaunošana būs veiksmīga, jūs izrakstīsities.", "back-restore-description": "Atjaunojot šo dublējumu, tiks pārrakstīti visi pašreizējie dati jūsu datu bāzē un datu direktorijā un aizstāti tos ar šīs dublējuma saturu. {cannot-be-undone}Ja atjaunošana būs veiksmīga, jūs izrakstīsities.",
"cannot-be-undone": "Šo darbību nevar atsaukt - lietojiet piesardzīgi.", "cannot-be-undone": "Šo darbību nevar atsaukt - lietojiet piesardzīgi.",
"postgresql-note": "Ja izmantojat PostgreSQL, lūdzu, pārskatiet to {backup-restore-process} pirms atjaunošanas.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "dublēšanas/atjaunošanas process dokumentācijā", "backup-restore-process-in-the-documentation": "dublēšanas/atjaunošanas process dokumentācijā",
"irreversible-acknowledgment": "Es saprotu, ka šī darbība ir neatgriezeniska, destruktīva un var izraisīt datu zudumu", "irreversible-acknowledgment": "Es saprotu, ka šī darbība ir neatgriezeniska, destruktīva un var izraisīt datu zudumu",
"restore-backup": "Atjaunot backup" "restore-backup": "Atjaunot backup"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Izvēlēto pārtikas produktu apvienošana apvienos avota pārtiku un mērķa pārtiku vienā ēdienā. Avota barība tiks svītrota, un visas atsauces uz avota pārtiku tiks atjauninātas, lai norādītu uz mērķa pārtiku.", "merge-dialog-text": "Izvēlēto pārtikas produktu apvienošana apvienos avota pārtiku un mērķa pārtiku vienā ēdienā. Avota barība tiks svītrota, un visas atsauces uz avota pārtiku tiks atjauninātas, lai norādītu uz mērķa pārtiku.",
"merge-food-example": "Apvienošanās {food1} {food2}", "merge-food-example": "Apvienošanās {food1} {food2}",
"seed-dialog-text": "Sēdziet datu bāzi ar pārtikas produktiem, pamatojoties uz jūsu vietējo valodu. Tādējādi tiks izveidoti vairāk nekā 200 izplatīti pārtikas produkti, kurus var izmantot datu bāzes sakārtošanai. Pārtika tiek tulkota ar kopienas centieniem.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Jūsu datu bāzē jau ir daži vienumi. Šī darbība nesaskaņos dublikātus, jums tie būs jāpārvalda manuāli.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Apvienojiet ēdienu", "combine-food": "Apvienojiet ēdienu",
"source-food": "Pārtikas avots", "source-food": "Pārtikas avots",
"target-food": "Mērķa pārtika", "target-food": "Mērķa pārtika",

View file

@ -15,7 +15,7 @@
"docs": "Documentatie", "docs": "Documentatie",
"download-log": "Logbestand downloaden", "download-log": "Logbestand downloaden",
"download-recipe-json": "Laatst ingelezen JSON", "download-recipe-json": "Laatst ingelezen JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Logboekregels", "log-lines": "Logboekregels",
"not-demo": "Geen demo", "not-demo": "Geen demo",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -579,7 +579,6 @@
"made-this": "Ik heb dit gemaakt", "made-this": "Ik heb dit gemaakt",
"how-did-it-turn-out": "Hoe was je gerecht?", "how-did-it-turn-out": "Hoe was je gerecht?",
"user-made-this": "{user} heeft dit gemaakt", "user-made-this": "{user} heeft dit gemaakt",
"last-made-date": "Laatst gemaakt op {date}",
"api-extras-description": "Extra's bij recepten zijn een belangrijke functie van de Mealie API. Hiermee kun je aangepaste JSON key/value paren maken bij een recept om naar te verwijzen vanuit applicaties van derden. Je kunt deze sleutels gebruiken om extra informatie te bieden, bijvoorbeeld om automatisering aan te sturen of aangepaste berichten naar je gewenste apparaat te laten versturen.", "api-extras-description": "Extra's bij recepten zijn een belangrijke functie van de Mealie API. Hiermee kun je aangepaste JSON key/value paren maken bij een recept om naar te verwijzen vanuit applicaties van derden. Je kunt deze sleutels gebruiken om extra informatie te bieden, bijvoorbeeld om automatisering aan te sturen of aangepaste berichten naar je gewenste apparaat te laten versturen.",
"message-key": "Berichtsleutel", "message-key": "Berichtsleutel",
"parse": "Ontleed", "parse": "Ontleed",
@ -647,7 +646,6 @@
"nextStep": "Volgende stap", "nextStep": "Volgende stap",
"recipe-actions": "Acties met recepten ", "recipe-actions": "Acties met recepten ",
"parser": { "parser": {
"experimental-alert-text": "Mealie gebruikt natuurlijke taalverwerking om te ontleden en maakt eenheden en levensmiddelen voor de ingrediënten van je recept. Deze functie is experimenteel en werkt misschien niet altijd zoals verwacht. Als je liever niet de bewerkte resultaten gebruikt, kan je 'Annuleren' selecterenl de wijzigingen worden dan niet opgeslagen.",
"ingredient-parser": "Ingrediëntenontleder", "ingredient-parser": "Ingrediëntenontleder",
"explanation": "Om de ingrediëntenontleder te gebruiken, klik op de knop 'Alles ontleden' om het proces te starten. Zodra de verwerkte ingrediënten beschikbaar zijn, kan je de items bekijken en controleren of ze correct verwerkt zijn. De vertrouwensscore van het model wordt weergegeven aan de rechterkant van de titel van het item. Deze score is een gemiddelde van alle afzonderlijke scores en is mogelijk niet altijd volledig.", "explanation": "Om de ingrediëntenontleder te gebruiken, klik op de knop 'Alles ontleden' om het proces te starten. Zodra de verwerkte ingrediënten beschikbaar zijn, kan je de items bekijken en controleren of ze correct verwerkt zijn. De vertrouwensscore van het model wordt weergegeven aan de rechterkant van de titel van het item. Deze score is een gemiddelde van alle afzonderlijke scores en is mogelijk niet altijd volledig.",
"alerts-explainer": "Waarschuwingen zullen worden getoond als er een overeenkomend levensmiddel of eenheid is gevonden, dat nog niet bestaat in de database.", "alerts-explainer": "Waarschuwingen zullen worden getoond als er een overeenkomend levensmiddel of eenheid is gevonden, dat nog niet bestaat in de database.",
@ -1051,7 +1049,7 @@
"merge-dialog-text": "Het combineren van de geselecteerde levensmiddelen zal het oorspronkelijke levensmiddel en het nieuwe levensmiddel samenvoegen. Het oorspronkelijke levensmiddel zal worden verwijderd en alle referenties worden aangepast, zodat ze naar het nieuwe levensmiddel verwijzen.", "merge-dialog-text": "Het combineren van de geselecteerde levensmiddelen zal het oorspronkelijke levensmiddel en het nieuwe levensmiddel samenvoegen. Het oorspronkelijke levensmiddel zal worden verwijderd en alle referenties worden aangepast, zodat ze naar het nieuwe levensmiddel verwijzen.",
"merge-food-example": "{food1} samenvoegen met {food2}", "merge-food-example": "{food1} samenvoegen met {food2}",
"seed-dialog-text": "Vul de database met levensmiddelen in jouw taal. Dit maakt meer dan 200 veelvoorkomende levensmiddelen aan die je in jouw database kan gebruiken. De vertalingen zijn verzorgd door een gemeenschap.", "seed-dialog-text": "Vul de database met levensmiddelen in jouw taal. Dit maakt meer dan 200 veelvoorkomende levensmiddelen aan die je in jouw database kan gebruiken. De vertalingen zijn verzorgd door een gemeenschap.",
"seed-dialog-warning": "Er bevinden zich al enkele artikelen in je database. Deze actie zal de duplicaten niet samenvoegen, dit moet handmatig worden beheerd.", "seed-dialog-warning": "Je hebt al enkele artikelen in je database. Deze actie zal duplicaten niet met elkaar in overeenstemming brengen, je zult ze handmatig moeten beheren.",
"combine-food": "Combineer levensmiddelen", "combine-food": "Combineer levensmiddelen",
"source-food": "Bron-levensmiddelen", "source-food": "Bron-levensmiddelen",
"target-food": "Doel-levensmiddel", "target-food": "Doel-levensmiddel",

View file

@ -579,7 +579,6 @@
"made-this": "Jeg har laget dette", "made-this": "Jeg har laget dette",
"how-did-it-turn-out": "Hvordan ble det?", "how-did-it-turn-out": "Hvordan ble det?",
"user-made-this": "{user} har laget dette", "user-made-this": "{user} har laget dette",
"last-made-date": "Sist laget {date}",
"api-extras-description": "Ekstramaterialer til oppskrifter er en viktig funksjon i Mealie API-en. De lar deg opprette egendefinerte JSON-nøkkel/verdi-par innenfor en oppskrift for å referere fra tredjepartsapplikasjoner. Du kan bruke disse nøklene til å gi informasjon for eksempel for å utløse automatiseringer eller egendefinerte meldinger som skal videreformidles til ønsket enhet.", "api-extras-description": "Ekstramaterialer til oppskrifter er en viktig funksjon i Mealie API-en. De lar deg opprette egendefinerte JSON-nøkkel/verdi-par innenfor en oppskrift for å referere fra tredjepartsapplikasjoner. Du kan bruke disse nøklene til å gi informasjon for eksempel for å utløse automatiseringer eller egendefinerte meldinger som skal videreformidles til ønsket enhet.",
"message-key": "Meldingsnøkkel", "message-key": "Meldingsnøkkel",
"parse": "Analyser", "parse": "Analyser",
@ -647,7 +646,6 @@
"nextStep": "Neste trinn", "nextStep": "Neste trinn",
"recipe-actions": "Oppskriftshandlinger", "recipe-actions": "Oppskriftshandlinger",
"parser": { "parser": {
"experimental-alert-text": "Mealie bruker naturlig språkbehandling til å analysere og lage enheter og matvarer til oppskriftsingrediensene dine. Denne funksjonen er eksperimentell og fungerer kanskje ikke som forventet. Hvis du foretrekker ikke å bruke de foreslåtte resultatene, kan du velge 'Avbryt', og endringene dine vil ikke bli lagret.",
"ingredient-parser": "Ingrediens-analyserer", "ingredient-parser": "Ingrediens-analyserer",
"explanation": "For å bruke ingrediens-forslag, klikk på 'Analyser alle' for å starte prosessen. Når de prosesserte ingrediensene er tilgjengelige, kan du se gjennom elementene og kontrollere at de er sjekket korrekt. Modellens tillitsverdi vises på høyre side av elementet. Denne scoren er et gjennomsnitt av alle de individuelle poengene og alltid er ikke helt nøyaktige.", "explanation": "For å bruke ingrediens-forslag, klikk på 'Analyser alle' for å starte prosessen. Når de prosesserte ingrediensene er tilgjengelige, kan du se gjennom elementene og kontrollere at de er sjekket korrekt. Modellens tillitsverdi vises på høyre side av elementet. Denne scoren er et gjennomsnitt av alle de individuelle poengene og alltid er ikke helt nøyaktige.",
"alerts-explainer": "Varsler vil bli vist dersom en matchende matvare eller enhet blir funnet, men ikke finnes i databasen.", "alerts-explainer": "Varsler vil bli vist dersom en matchende matvare eller enhet blir funnet, men ikke finnes i databasen.",
@ -722,7 +720,7 @@
"backup-restore": "Gjenoppretting av sikkerhetskopi", "backup-restore": "Gjenoppretting av sikkerhetskopi",
"back-restore-description": "Gjenoppretting av denne sikkerhetskopien vil overskrive alle gjeldende data i databasen og i datamappen og erstatte dem med innholdet i denne sikkerhetskopien. {cannot-be-undone} Hvis gjenopprettingen er vellykket, vil du bli logget ut.", "back-restore-description": "Gjenoppretting av denne sikkerhetskopien vil overskrive alle gjeldende data i databasen og i datamappen og erstatte dem med innholdet i denne sikkerhetskopien. {cannot-be-undone} Hvis gjenopprettingen er vellykket, vil du bli logget ut.",
"cannot-be-undone": "Denne handlingen kan ikke angres bruk med forsiktighet.", "cannot-be-undone": "Denne handlingen kan ikke angres bruk med forsiktighet.",
"postgresql-note": "Hvis du bruker PostGreSQL, vennligst gå igjennom {backup-restore-process} før du gjenoppretter.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "sikkerhetskopiering/gjenoppretting prosess i dokumentasjonen", "backup-restore-process-in-the-documentation": "sikkerhetskopiering/gjenoppretting prosess i dokumentasjonen",
"irreversible-acknowledgment": "Jeg forstår at denne handlingen er irreversibel, destruktiv og kan føre til tap av data", "irreversible-acknowledgment": "Jeg forstår at denne handlingen er irreversibel, destruktiv og kan føre til tap av data",
"restore-backup": "Gjenopprett sikkerhetskopi" "restore-backup": "Gjenopprett sikkerhetskopi"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Ved å kombinere de valgte matvarene vil de bli slått sammen til én matvare. Den første matvaren vil bli slettet, og alle referanser til denne vil bli oppdatert til å peke til den nye matvaren.", "merge-dialog-text": "Ved å kombinere de valgte matvarene vil de bli slått sammen til én matvare. Den første matvaren vil bli slettet, og alle referanser til denne vil bli oppdatert til å peke til den nye matvaren.",
"merge-food-example": "Slår sammen {food1} til {food2}", "merge-food-example": "Slår sammen {food1} til {food2}",
"seed-dialog-text": "Legg til matvarer i databasen basert på ditt lokale språk. Dette vil opprette 200+ vanlige matvarer som kan brukes til å organisere databasen din. Matvarene oversettes via en fellesinnsats fra samfunnet.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Du har allerede noen elementer i databasen din. Denne handlingen vil ikke forene duplikater, du må håndtere dem manuelt.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Kombiner matvarer", "combine-food": "Kombiner matvarer",
"source-food": "Kilde for matvare", "source-food": "Kilde for matvare",
"target-food": "Mål for matvare", "target-food": "Mål for matvare",

View file

@ -579,7 +579,6 @@
"made-this": "Ugotowałem to", "made-this": "Ugotowałem to",
"how-did-it-turn-out": "Jak się to udało?", "how-did-it-turn-out": "Jak się to udało?",
"user-made-this": "{user} ugotował(a) to", "user-made-this": "{user} ugotował(a) to",
"last-made-date": "Ostatnio ugotowano {date}",
"api-extras-description": "Dodatki w przepisach są kluczową cechą API Mealie. Pozwalają na tworzenie niestandardowych par kluczy/wartości JSON w przepisie do odwoływania się przez zewnętrzne aplikacje. Możesz użyć tych kluczy do wyzwalania automatyzacji lub przekazywania niestandardowych wiadomości do twoich wybranych urządzeń.", "api-extras-description": "Dodatki w przepisach są kluczową cechą API Mealie. Pozwalają na tworzenie niestandardowych par kluczy/wartości JSON w przepisie do odwoływania się przez zewnętrzne aplikacje. Możesz użyć tych kluczy do wyzwalania automatyzacji lub przekazywania niestandardowych wiadomości do twoich wybranych urządzeń.",
"message-key": "Klucz Wiadomości", "message-key": "Klucz Wiadomości",
"parse": "Analizuj", "parse": "Analizuj",
@ -637,9 +636,9 @@
"recipe-debugger-use-openai-description": "Użyj OpenAI, aby dynamicznie analizować przepisy zamiast polegać na bibliotece scraperów. Podczas tworzenia przepisu za pomocą adresu URL jest to wykonywane automatycznie, jeśli scraperowi nie uda się przetworzyć przepisu, ale możesz przetestować go ręcznie tutaj.", "recipe-debugger-use-openai-description": "Użyj OpenAI, aby dynamicznie analizować przepisy zamiast polegać na bibliotece scraperów. Podczas tworzenia przepisu za pomocą adresu URL jest to wykonywane automatycznie, jeśli scraperowi nie uda się przetworzyć przepisu, ale możesz przetestować go ręcznie tutaj.",
"debug": "Debuguj", "debug": "Debuguj",
"tree-view": "Widok drzewa", "tree-view": "Widok drzewa",
"recipe-servings": "Recipe Servings", "recipe-servings": "Ilość porcji",
"recipe-yield": "Wydajność przepisu", "recipe-yield": "Wydajność przepisu",
"recipe-yield-text": "Recipe Yield Text", "recipe-yield-text": "Tekst pola przepisu",
"unit": "Jednostka", "unit": "Jednostka",
"upload-image": "Prześlij obraz", "upload-image": "Prześlij obraz",
"screen-awake": "Pozostaw ekran włączony", "screen-awake": "Pozostaw ekran włączony",
@ -647,7 +646,6 @@
"nextStep": "Następny krok", "nextStep": "Następny krok",
"recipe-actions": "Akcje przepisów", "recipe-actions": "Akcje przepisów",
"parser": { "parser": {
"experimental-alert-text": "Mączka używa naturalnego przetwarzania języka, aby analizować i tworzyć jednostki oraz artykuły żywnościowe dla twoich składników. Ta funkcja jest eksperymentalna i nie zawsze działa zgodnie z oczekiwaniami. Jeśli wolisz nie używać zanalizowanych wyników, możesz wybrać 'Anuluj', a zmiany nie zostaną zapisane.",
"ingredient-parser": "Parser składników", "ingredient-parser": "Parser składników",
"explanation": "Aby użyć analizatora składników, kliknij przycisk \"Przeanalizuj wszystko\", aby rozpocząć proces. Gdy przetworzone składniki będą dostępne, możesz przejrzeć elementy i sprawdzić, czy zostały one poprawnie przetworzone. Wskaźnik zaufania modelu jest wyświetlany po prawej stronie tytułu elementu. Ten wynik jest średnią wszystkich wyników i nie zawsze będzie dokładny.", "explanation": "Aby użyć analizatora składników, kliknij przycisk \"Przeanalizuj wszystko\", aby rozpocząć proces. Gdy przetworzone składniki będą dostępne, możesz przejrzeć elementy i sprawdzić, czy zostały one poprawnie przetworzone. Wskaźnik zaufania modelu jest wyświetlany po prawej stronie tytułu elementu. Ten wynik jest średnią wszystkich wyników i nie zawsze będzie dokładny.",
"alerts-explainer": "Powiadomienia będą wyświetlane, jeśli zostanie znaleziona pasująca żywność lub jednostka, ale nie istnieje w bazie danych.", "alerts-explainer": "Powiadomienia będą wyświetlane, jeśli zostanie znaleziona pasująca żywność lub jednostka, ale nie istnieje w bazie danych.",
@ -669,7 +667,7 @@
"recipe-finder-description": "Wyszukuj przepisy na podstawie składników, które masz pod ręką. Możesz również filtrować według dostępnych narzędzi oraz ustawić maksymalną liczbę brakujących składników lub przyborów kuchennych.", "recipe-finder-description": "Wyszukuj przepisy na podstawie składników, które masz pod ręką. Możesz również filtrować według dostępnych narzędzi oraz ustawić maksymalną liczbę brakujących składników lub przyborów kuchennych.",
"selected-ingredients": "Wybrany składnik", "selected-ingredients": "Wybrany składnik",
"no-ingredients-selected": "Nie wybrano żadnych składników", "no-ingredients-selected": "Nie wybrano żadnych składników",
"missing": "Missing", "missing": "Brakujący",
"no-recipes-found": "Nie znaleziono przepisów", "no-recipes-found": "Nie znaleziono przepisów",
"no-recipes-found-description": "Spróbuj dodać więcej składników do wyszukiwania lub dostosować filtry", "no-recipes-found-description": "Spróbuj dodać więcej składników do wyszukiwania lub dostosować filtry",
"include-ingredients-on-hand": "Uwzględnij składniki dostępne pod ręką", "include-ingredients-on-hand": "Uwzględnij składniki dostępne pod ręką",
@ -678,8 +676,8 @@
"max-missing-tools": "Maks. ilość brakujących przyborów kuchennych", "max-missing-tools": "Maks. ilość brakujących przyborów kuchennych",
"selected-tools": "Wybrane przybory kuchenne", "selected-tools": "Wybrane przybory kuchenne",
"other-filters": "Inne filtry", "other-filters": "Inne filtry",
"ready-to-make": "Ready to Make", "ready-to-make": "Gotowe do użycia",
"almost-ready-to-make": "Almost Ready to Make" "almost-ready-to-make": "Prawie gotowe do użycia"
}, },
"search": { "search": {
"advanced-search": "Wyszukiwanie zaawansowane", "advanced-search": "Wyszukiwanie zaawansowane",
@ -722,7 +720,7 @@
"backup-restore": "Przywróć kopie", "backup-restore": "Przywróć kopie",
"back-restore-description": "Przywracanie tej kopii zapasowej nadpisze wszystkie aktualne dane w bazie danych i w katalogu danych i zastąpi je zawartością tej kopii zapasowej. {cannot-be-undone} Jeśli przywrócenie zakończy się pomyślnie, zostaniesz wylogowany.", "back-restore-description": "Przywracanie tej kopii zapasowej nadpisze wszystkie aktualne dane w bazie danych i w katalogu danych i zastąpi je zawartością tej kopii zapasowej. {cannot-be-undone} Jeśli przywrócenie zakończy się pomyślnie, zostaniesz wylogowany.",
"cannot-be-undone": "Tej czynności nie można cofnąć - należy zachować ostrożność.", "cannot-be-undone": "Tej czynności nie można cofnąć - należy zachować ostrożność.",
"postgresql-note": "Jeśli używasz PostGreSQL, sprawdź {backup-restore-process} przed przywróceniem.", "postgresql-note": "Jeśli używasz PostgreSQL, sprawdź {backup-restore-process} przed przywróceniem.",
"backup-restore-process-in-the-documentation": "proces tworzenia kopii zapasowej/przywracania w dokumentacji", "backup-restore-process-in-the-documentation": "proces tworzenia kopii zapasowej/przywracania w dokumentacji",
"irreversible-acknowledgment": "Rozumiem, że ta operacja jest nieodwracalna, destrukcyjna i może spowodować utratę danych", "irreversible-acknowledgment": "Rozumiem, że ta operacja jest nieodwracalna, destrukcyjna i może spowodować utratę danych",
"restore-backup": "Przywróć kopie" "restore-backup": "Przywróć kopie"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Połączenie wybranej żywności połączy źródło żywności i żywność docelową w pojedynczą żywność. Źródło żywności zostanie usunięte, a wszystkie odniesienia do źródłowej żywności zostaną zaktualizowane tak, aby wskazywały na docelową żywność.", "merge-dialog-text": "Połączenie wybranej żywności połączy źródło żywności i żywność docelową w pojedynczą żywność. Źródło żywności zostanie usunięte, a wszystkie odniesienia do źródłowej żywności zostaną zaktualizowane tak, aby wskazywały na docelową żywność.",
"merge-food-example": "Scalanie {food1} do {food2}", "merge-food-example": "Scalanie {food1} do {food2}",
"seed-dialog-text": "Wypełnij bazę daniami na podstawie wybranego lokalnego języka. Akcja ta stworzy ponad 200 zwyczajowych potraw które mogą zostać użyte do organizacji Twojej bazy. Potrawy tłumaczone są przez wysiłek społeczeństwa.", "seed-dialog-text": "Wypełnij bazę danych produktami spożywczymi na podstawie twojego lokalnego języka. Dzięki temu utworzysz ponad 200 popularnych produktów spożywczych, które można wykorzystać do zorganizowania bazy danych. Produkty spożywcze są tłumaczone dzięki wysiłkom społeczności.",
"seed-dialog-warning": "Posiadasz już wartości w bazie. Rozwiązanie problemu z duplikatami leżeć będzie w gestii użytkownika.", "seed-dialog-warning": "W twojej bazie danych znajdują się już niektóre pozycje. Ta akcja nie usunie duplikatów, więc będziesz musiał zarządzać nimi ręcznie.",
"combine-food": "Połącz Żywność", "combine-food": "Połącz Żywność",
"source-food": "Żywność Źródłowa", "source-food": "Żywność Źródłowa",
"target-food": "Żywność Docelowa", "target-food": "Żywność Docelowa",
@ -1115,9 +1113,9 @@
"source-unit-will-be-deleted": "Jednostka źródłowa zostanie usunięta" "source-unit-will-be-deleted": "Jednostka źródłowa zostanie usunięta"
}, },
"recipe-actions": { "recipe-actions": {
"recipe-actions-data": "Recipe Actions Data", "recipe-actions-data": "Dane akcji przepisu",
"new-recipe-action": "", "new-recipe-action": "",
"edit-recipe-action": "Edit Recipe Action", "edit-recipe-action": "Edycja akcji przepisu",
"action-type": "Typ akcji" "action-type": "Typ akcji"
}, },
"create-alias": "Utwórz alias", "create-alias": "Utwórz alias",

View file

@ -8,7 +8,7 @@
"database-type": "Tipo do Banco de Dados", "database-type": "Tipo do Banco de Dados",
"database-url": "URL do banco de dados", "database-url": "URL do banco de dados",
"default-group": "Grupo Padrão", "default-group": "Grupo Padrão",
"default-household": "Default Household", "default-household": "Casa Padrão",
"demo": "Demonstração", "demo": "Demonstração",
"demo-status": "Status da Demonstração", "demo-status": "Status da Demonstração",
"development": "Desenvolvimento", "development": "Desenvolvimento",
@ -182,7 +182,7 @@
"date": "Data", "date": "Data",
"id": "Id", "id": "Id",
"owner": "Proprietário", "owner": "Proprietário",
"change-owner": "Change Owner", "change-owner": "Alterar Dono",
"date-added": "Data de inclusão", "date-added": "Data de inclusão",
"none": "Nenhum", "none": "Nenhum",
"run": "Executar", "run": "Executar",
@ -214,10 +214,10 @@
"confirm-delete-generic-items": "Tem certeza que quer excluir os itens seguintes?", "confirm-delete-generic-items": "Tem certeza que quer excluir os itens seguintes?",
"organizers": "Organizadores", "organizers": "Organizadores",
"caution": "Cuidado", "caution": "Cuidado",
"show-advanced": "Show Advanced", "show-advanced": "Mostrar Avançado",
"add-field": "Add Field", "add-field": "Adicionar Campo",
"date-created": "Date Created", "date-created": "Data de Criação",
"date-updated": "Date Updated" "date-updated": "Data de Atualização"
}, },
"group": { "group": {
"are-you-sure-you-want-to-delete-the-group": "Tem certeza que deseja excluir o grupo <b>{groupName}<b/>?", "are-you-sure-you-want-to-delete-the-group": "Tem certeza que deseja excluir o grupo <b>{groupName}<b/>?",
@ -244,9 +244,9 @@
"keep-my-recipes-private-description": "Define o seu grupo e todas as receitas padrão como privadas. Você sempre pode mudar isso mais tarde." "keep-my-recipes-private-description": "Define o seu grupo e todas as receitas padrão como privadas. Você sempre pode mudar isso mais tarde."
}, },
"manage-members": "Gerenciar membros", "manage-members": "Gerenciar membros",
"manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", "manage-members-description": "Gerencie as permissões dos membros da sua casa. {manage} permite ao usuário acessar a página de gerenciamento de dados, e {invite} permite ao usuário gerar links de convites para outros usuários. Os proprietários de grupos não podem mudar suas próprias permissões.",
"manage": "Gerenciar", "manage": "Gerenciar",
"manage-household": "Manage Household", "manage-household": "Gerenciar Casa",
"invite": "Convidar", "invite": "Convidar",
"looking-to-update-your-profile": "Procurando atualizar seu perfil?", "looking-to-update-your-profile": "Procurando atualizar seu perfil?",
"default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada no seu grupo. Elas podem ser alteradas para receitas individuais no menu de configurações de receitas.", "default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada no seu grupo. Elas podem ser alteradas para receitas individuais no menu de configurações de receitas.",
@ -267,7 +267,7 @@
"disable-users-from-commenting-on-recipes": "Desabilitar usuários de comentar em receitas", "disable-users-from-commenting-on-recipes": "Desabilitar usuários de comentar em receitas",
"disable-users-from-commenting-on-recipes-description": "Oculta a seção de comentários na página de receita e desativa os comentários", "disable-users-from-commenting-on-recipes-description": "Oculta a seção de comentários na página de receita e desativa os comentários",
"disable-organizing-recipe-ingredients-by-units-and-food": "Desativar a organização de ingredientes de receita por unidades e alimentos", "disable-organizing-recipe-ingredients-by-units-and-food": "Desativar a organização de ingredientes de receita por unidades e alimentos",
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", "disable-organizing-recipe-ingredients-by-units-and-food-description": "Oculta os campos Comida, Unidade e Quantidade de ingredientes e trata os ingredientes como campos de texto simples",
"general-preferences": "Preferências Gerais", "general-preferences": "Preferências Gerais",
"group-recipe-preferences": "Preferências de Grupo de Receitas", "group-recipe-preferences": "Preferências de Grupo de Receitas",
"report": "Denunciar", "report": "Denunciar",
@ -280,8 +280,8 @@
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household" "you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
}, },
"household": { "household": {
"household": "Household", "household": "Casa",
"households": "Households", "households": "Casas",
"user-household": "User Household", "user-household": "User Household",
"create-household": "Create Household", "create-household": "Create Household",
"household-name": "Household Name", "household-name": "Household Name",
@ -467,7 +467,7 @@
"calories-suffix": "calorias", "calories-suffix": "calorias",
"carbohydrate-content": "Carboidrato", "carbohydrate-content": "Carboidrato",
"categories": "Categorias", "categories": "Categorias",
"cholesterol-content": "Cholesterol", "cholesterol-content": "Colesterol",
"comment-action": "Comentário", "comment-action": "Comentário",
"comment": "Comentário", "comment": "Comentário",
"comments": "Comentários", "comments": "Comentários",
@ -514,11 +514,11 @@
"recipe-updated": "Receita atualizada", "recipe-updated": "Receita atualizada",
"remove-from-favorites": "Remover dos Favoritos", "remove-from-favorites": "Remover dos Favoritos",
"remove-section": "Remover Seção", "remove-section": "Remover Seção",
"saturated-fat-content": "Saturated fat", "saturated-fat-content": "Gorduras saturadas",
"save-recipe-before-use": "Salve a receita antes de utilizar", "save-recipe-before-use": "Salve a receita antes de utilizar",
"section-title": "Título da Seção", "section-title": "Título da Seção",
"servings": "Porções", "servings": "Porções",
"serves-amount": "Serves {amount}", "serves-amount": "Serve {amount}",
"share-recipe-message": "Eu quero compartilhar minha receita de {0} com você.", "share-recipe-message": "Eu quero compartilhar minha receita de {0} com você.",
"show-nutrition-values": "Mostrar informações nutricionais", "show-nutrition-values": "Mostrar informações nutricionais",
"sodium-content": "Sódio", "sodium-content": "Sódio",
@ -528,7 +528,7 @@
"total-time": "Tempo Total", "total-time": "Tempo Total",
"trans-fat-content": "Trans-fat", "trans-fat-content": "Trans-fat",
"unable-to-delete-recipe": "Não foi possível apagar a receita", "unable-to-delete-recipe": "Não foi possível apagar a receita",
"unsaturated-fat-content": "Unsaturated fat", "unsaturated-fat-content": "Gorduras não saturadas",
"no-recipe": "Nenhuma Receita", "no-recipe": "Nenhuma Receita",
"locked-by-owner": "Bloqueado pelo Proprietário", "locked-by-owner": "Bloqueado pelo Proprietário",
"join-the-conversation": "Participe da conversa", "join-the-conversation": "Participe da conversa",
@ -579,7 +579,6 @@
"made-this": "Eu Fiz Isso", "made-this": "Eu Fiz Isso",
"how-did-it-turn-out": "Como que ficou?", "how-did-it-turn-out": "Como que ficou?",
"user-made-this": "{user} fez isso", "user-made-this": "{user} fez isso",
"last-made-date": "Feito pela última vez em {date}",
"api-extras-description": "Extras de receitas são atributos-chave da API do Mealie. Assim, você pode criar pares chave/valor JSON personalizados dentro de uma receita, referenciando aplicações de terceiros. Você pode usar as chaves para fornecer informações, como por ex. ativar automações ou mensagens que serão enviadas a seus dispositivos.", "api-extras-description": "Extras de receitas são atributos-chave da API do Mealie. Assim, você pode criar pares chave/valor JSON personalizados dentro de uma receita, referenciando aplicações de terceiros. Você pode usar as chaves para fornecer informações, como por ex. ativar automações ou mensagens que serão enviadas a seus dispositivos.",
"message-key": "Chave de mensagem", "message-key": "Chave de mensagem",
"parse": "Analisar", "parse": "Analisar",
@ -600,9 +599,9 @@
"create-recipe-from-an-image": "Create Recipe from an Image", "create-recipe-from-an-image": "Create Recipe from an Image",
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.", "create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.", "crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
"create-from-image": "Create from Image", "create-from-image": "Criar a partir da imagem",
"should-translate-description": "Translate the recipe into my language", "should-translate-description": "Traduza a receita para o meu idioma",
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.", "please-wait-image-procesing": "Por favor aguarde, a imagem está sendo processada. Isto pode levar algum tempo.",
"bulk-url-import": "Importação de URL em massa", "bulk-url-import": "Importação de URL em massa",
"debug-scraper": "Debug Scraper", "debug-scraper": "Debug Scraper",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes exclusivos.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes exclusivos.",
@ -611,7 +610,7 @@
"scrape-recipe-description": "Scrape uma receita por url. Forneça o Url para o site que você deseja scrape, e Mealie tentará raspar a receita desse site e adicioná-la à sua coleção.", "scrape-recipe-description": "Scrape uma receita por url. Forneça o Url para o site que você deseja scrape, e Mealie tentará raspar a receita desse site e adicioná-la à sua coleção.",
"scrape-recipe-have-a-lot-of-recipes": "Tem muitas receitas a extrair de uma vez?", "scrape-recipe-have-a-lot-of-recipes": "Tem muitas receitas a extrair de uma vez?",
"scrape-recipe-suggest-bulk-importer": "Tente o importador em massa", "scrape-recipe-suggest-bulk-importer": "Tente o importador em massa",
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?", "scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON brutos?",
"scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly", "scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly",
"import-original-keywords-as-tags": "Importar palavras-chave originais como marcadores", "import-original-keywords-as-tags": "Importar palavras-chave originais como marcadores",
"stay-in-edit-mode": "Permanecer no modo de edição", "stay-in-edit-mode": "Permanecer no modo de edição",
@ -647,7 +646,6 @@
"nextStep": "Próximo passo", "nextStep": "Próximo passo",
"recipe-actions": "Ações de Receita", "recipe-actions": "Ações de Receita",
"parser": { "parser": {
"experimental-alert-text": "Mealie usa processamento de linguagem natural para analisar e criar unidades e itens de comida para seus ingredientes. Esse recurso é experimental e pode não funcionar como esperado. Se preferir não usar os resultados analisados, selecione \"Cancelar\" e suas mudanças não serão salvas.",
"ingredient-parser": "Analisador de Ingredientes", "ingredient-parser": "Analisador de Ingredientes",
"explanation": "Para usar o analisador de ingredientes, clique no botão \"Analisar Tudo\" para iniciar o processo. Assim que os ingredientes processados estiverem disponíveis, você pode revisá-los e verificar se foram analisados corretamente. A pontuação de confiança do modelo estará à direita do título do item. Essa pontuação é uma média de todas as pontuações individuais e podem não ser precisas.", "explanation": "Para usar o analisador de ingredientes, clique no botão \"Analisar Tudo\" para iniciar o processo. Assim que os ingredientes processados estiverem disponíveis, você pode revisá-los e verificar se foram analisados corretamente. A pontuação de confiança do modelo estará à direita do título do item. Essa pontuação é uma média de todas as pontuações individuais e podem não ser precisas.",
"alerts-explainer": "Avisos serão exibidos se uma comida, ou unidade, for encontrada, mas não existir no banco de dados.", "alerts-explainer": "Avisos serão exibidos se uma comida, ou unidade, for encontrada, mas não existir no banco de dados.",
@ -662,22 +660,22 @@
"no-food": "Sem Comida" "no-food": "Sem Comida"
}, },
"reset-servings-count": "Reset Servings Count", "reset-servings-count": "Reset Servings Count",
"not-linked-ingredients": "Additional Ingredients" "not-linked-ingredients": "Ingredientes adicionais"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Recipe Finder", "recipe-finder": "Localizador de Receitas",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.", "recipe-finder-description": "Procure por receitas baseadas em ingredientes que você tem na mão. Você também pode filtrar por ferramentas disponíveis e definir um número máximo de ingredientes ou ferramentas que faltam.",
"selected-ingredients": "Selected Ingredients", "selected-ingredients": "Ingredientes selecionados",
"no-ingredients-selected": "No ingredients selected", "no-ingredients-selected": "Nenhum ingrediente selecionado",
"missing": "Missing", "missing": "Ausente",
"no-recipes-found": "No recipes found", "no-recipes-found": "Nenhuma receita encontrada",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters", "no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand", "include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand", "include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients", "max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools", "max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools", "selected-tools": "Ferramentas Selecionadas",
"other-filters": "Other Filters", "other-filters": "Outros Filtros",
"ready-to-make": "Ready to Make", "ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make" "almost-ready-to-make": "Almost Ready to Make"
}, },
@ -690,7 +688,7 @@
"or": "Ou", "or": "Ou",
"has-any": "Tem alguma", "has-any": "Tem alguma",
"has-all": "Tem todos", "has-all": "Tem todos",
"clear-selection": "Clear Selection", "clear-selection": "Limpar Seleção",
"results": "Resultados", "results": "Resultados",
"search": "Pesquisar", "search": "Pesquisar",
"search-mealie": "Pesquisar no Mealie (pressione /)", "search-mealie": "Pesquisar no Mealie (pressione /)",
@ -722,7 +720,7 @@
"backup-restore": "Restauração de Backup", "backup-restore": "Restauração de Backup",
"back-restore-description": "Restaurar este backup substituirá todos os dados atuais no seu banco de dados e no diretório de dados e os substituirá pelo conteúdo deste backup. {cannot-be-undone} Se a restauração for bem-sucedida, você será desconectado.", "back-restore-description": "Restaurar este backup substituirá todos os dados atuais no seu banco de dados e no diretório de dados e os substituirá pelo conteúdo deste backup. {cannot-be-undone} Se a restauração for bem-sucedida, você será desconectado.",
"cannot-be-undone": "Esta ação não pode ser desfeita - use com cautela.", "cannot-be-undone": "Esta ação não pode ser desfeita - use com cautela.",
"postgresql-note": "Se você estiver usando o PostGreSQL, por favor, revise o {backup-restore-process} antes de restaurar.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "fazer backup/restauração do processo na documentação", "backup-restore-process-in-the-documentation": "fazer backup/restauração do processo na documentação",
"irreversible-acknowledgment": "Eu entendo que esta ação é irreversível, destrutiva e pode causar perda de dados", "irreversible-acknowledgment": "Eu entendo que esta ação é irreversível, destrutiva e pode causar perda de dados",
"restore-backup": "Restaurar Backup" "restore-backup": "Restaurar Backup"
@ -884,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Tem certeza que deseja marcar todos os itens?", "are-you-sure-you-want-to-check-all-items": "Tem certeza que deseja marcar todos os itens?",
"are-you-sure-you-want-to-uncheck-all-items": "Tem certeza que deseja desmarcar todos os itens?", "are-you-sure-you-want-to-uncheck-all-items": "Tem certeza que deseja desmarcar todos os itens?",
"are-you-sure-you-want-to-delete-checked-items": "Tem certeza que deseja apagar todos os itens marcados?", "are-you-sure-you-want-to-delete-checked-items": "Tem certeza que deseja apagar todos os itens marcados?",
"no-shopping-lists-found": "No Shopping Lists Found" "no-shopping-lists-found": "Nenhuma lista de compras encontrada"
}, },
"sidebar": { "sidebar": {
"all-recipes": "Todas as Receitas", "all-recipes": "Todas as Receitas",
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "A combinação dos alimentos seleccionados irá fundir a fonte de alimentos e almejar os alimentos num único alimento. O alimento de origem será eliminado e todas as referências ao alimento de origem serão actualizadas de modo a indicar os alimentos visados.", "merge-dialog-text": "A combinação dos alimentos seleccionados irá fundir a fonte de alimentos e almejar os alimentos num único alimento. O alimento de origem será eliminado e todas as referências ao alimento de origem serão actualizadas de modo a indicar os alimentos visados.",
"merge-food-example": "Mesclando {food1} em {food2}", "merge-food-example": "Mesclando {food1} em {food2}",
"seed-dialog-text": "Semente a base de dados com alimentos baseado no seu idioma local. Isso criará mais de 200 alimentos comuns que podem ser usados para organizar sua base de dados. Os alimentos são traduzidos através de um esforço comunitário.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Você já tem alguns itens no seu banco de dados. Esta ação não irá reconciliar duplicados, você terá que gerenciá-los manualmente.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Mesclar Comida", "combine-food": "Mesclar Comida",
"source-food": "Comida original", "source-food": "Comida original",
"target-food": "Comida alvo", "target-food": "Comida alvo",
@ -1286,17 +1284,17 @@
"restore-from-v1-backup": "Tem uma cópia de segurança de uma instância anterior do Mealie v1? Você pode restaurá-la aqui.", "restore-from-v1-backup": "Tem uma cópia de segurança de uma instância anterior do Mealie v1? Você pode restaurá-la aqui.",
"manage-profile-or-get-invite-link": "Gerencie seu próprio perfil, ou pegue um link de convite para compartilhar." "manage-profile-or-get-invite-link": "Gerencie seu próprio perfil, ou pegue um link de convite para compartilhar."
}, },
"debug-openai-services": "Debug OpenAI Services", "debug-openai-services": "Debug de Serviços OpenAI",
"debug-openai-services-description": "Use this page to debug OpenAI services. You can test your OpenAI connection and see the results here. If you have image services enabled, you can also provide an image.", "debug-openai-services-description": "Use esta página para depurar serviços OpenAI. Você pode testar a sua conexão OpenAI e ver os resultados aqui. Se você tiver os serviços de imagem ativados, você também pode fornecer uma imagem.",
"run-test": "Run Test", "run-test": "Executar teste",
"test-results": "Test Results", "test-results": "Resultados do teste",
"group-delete-note": "Groups with users or households cannot be deleted", "group-delete-note": "Groups with users or households cannot be deleted",
"household-delete-note": "Households with users cannot be deleted" "household-delete-note": "Households with users cannot be deleted"
}, },
"profile": { "profile": {
"welcome-user": "👋 Bem-vindo(a), {0}!", "welcome-user": "👋 Bem-vindo(a), {0}!",
"description": "Gerencie seu perfil, receitas e configurações de grupo.", "description": "Gerencie seu perfil, receitas e configurações de grupo.",
"invite-link": "Invite Link", "invite-link": "Link de convite",
"get-invite-link": "Obter link de convite", "get-invite-link": "Obter link de convite",
"get-public-link": "Obter link público", "get-public-link": "Obter link público",
"account-summary": "Resumo da conta", "account-summary": "Resumo da conta",
@ -1367,21 +1365,21 @@
"or": "OR" "or": "OR"
}, },
"relational-operators": { "relational-operators": {
"equals": "equals", "equals": "igual a",
"does-not-equal": "does not equal", "does-not-equal": "não é igual a",
"is-greater-than": "is greater than", "is-greater-than": "é maior que",
"is-greater-than-or-equal-to": "is greater than or equal to", "is-greater-than-or-equal-to": "é maior ou igual a",
"is-less-than": "is less than", "is-less-than": "é menor que",
"is-less-than-or-equal-to": "is less than or equal to" "is-less-than-or-equal-to": "é menor ou igual a"
}, },
"relational-keywords": { "relational-keywords": {
"is": "is", "is": "é",
"is-not": "is not", "is-not": "não é",
"is-one-of": "is one of", "is-one-of": "é um(a) de",
"is-not-one-of": "is not one of", "is-not-one-of": "não é um de",
"contains-all-of": "contains all of", "contains-all-of": "contém todos de",
"is-like": "is like", "is-like": "é como",
"is-not-like": "is not like" "is-not-like": "não é como"
} }
} }
} }

View file

@ -15,7 +15,7 @@
"docs": "Documentação", "docs": "Documentação",
"download-log": "Transferir Log", "download-log": "Transferir Log",
"download-recipe-json": "Último JSON recuperado", "download-recipe-json": "Último JSON recuperado",
"github": "Github", "github": "GitHub",
"log-lines": "Linhas de registo", "log-lines": "Linhas de registo",
"not-demo": "Não Demonstração", "not-demo": "Não Demonstração",
"portfolio": "Portefólio", "portfolio": "Portefólio",
@ -579,7 +579,6 @@
"made-this": "Eu fiz isto", "made-this": "Eu fiz isto",
"how-did-it-turn-out": "Que tal ficou?", "how-did-it-turn-out": "Que tal ficou?",
"user-made-this": "{user} fez isto", "user-made-this": "{user} fez isto",
"last-made-date": "Última vez {date}",
"api-extras-description": "Extras para receitas são funcionalidades chave da API Mealie. Estas permitem criar, dentro de uma receita, pares personalizados de chave/valor em JSON, para referência a partir de aplicações de terceiros. Pode usar essas chaves para fornecer informações, por exemplo, para acionar automações ou mensagens personalizadas para transmitir a um determinado dispositivo.", "api-extras-description": "Extras para receitas são funcionalidades chave da API Mealie. Estas permitem criar, dentro de uma receita, pares personalizados de chave/valor em JSON, para referência a partir de aplicações de terceiros. Pode usar essas chaves para fornecer informações, por exemplo, para acionar automações ou mensagens personalizadas para transmitir a um determinado dispositivo.",
"message-key": "Chave de Mensagem", "message-key": "Chave de Mensagem",
"parse": "Interpretar", "parse": "Interpretar",
@ -647,7 +646,6 @@
"nextStep": "Próximo passo", "nextStep": "Próximo passo",
"recipe-actions": "Ações da Receita", "recipe-actions": "Ações da Receita",
"parser": { "parser": {
"experimental-alert-text": "O Mealie utiliza o processamento de linguagem natural para analisar e criar unidades e itens alimentares para os ingredientes da sua receita. Esta funcionalidade é experimental e pode nem sempre funcionar como esperado. Se preferir não utilizar os resultados analisados, pode selecionar “Cancelar” e as suas alterações não serão guardadas.",
"ingredient-parser": "Analisador de ingredientes", "ingredient-parser": "Analisador de ingredientes",
"explanation": "Para utilizar o analisador de ingredientes, clique no botão “Analisar tudo” para iniciar o processo. Quando os ingredientes processados estiverem disponíveis, pode rever os itens e verificar se foram analisados corretamente. A pontuação de confiança do modelo é apresentada à direita do título do item. Esta pontuação é uma média de todas as pontuações individuais e pode nem sempre ser completamente exata.", "explanation": "Para utilizar o analisador de ingredientes, clique no botão “Analisar tudo” para iniciar o processo. Quando os ingredientes processados estiverem disponíveis, pode rever os itens e verificar se foram analisados corretamente. A pontuação de confiança do modelo é apresentada à direita do título do item. Esta pontuação é uma média de todas as pontuações individuais e pode nem sempre ser completamente exata.",
"alerts-explainer": "Serão apresentados alertas se for encontrado um alimento ou unidade correspondente, mas que não exista na base de dados.", "alerts-explainer": "Serão apresentados alertas se for encontrado um alimento ou unidade correspondente, mas que não exista na base de dados.",
@ -722,7 +720,7 @@
"backup-restore": "Restaurar backup", "backup-restore": "Restaurar backup",
"back-restore-description": "Restaurar este backup irá apagar todos os dados atuais da sua base de dados e da pasta de dados e substituí-los pelo conteúdo deste backup. {cannot-be-undone} Se o restauro for bem-sucedido, a sua sessão será encerrada.", "back-restore-description": "Restaurar este backup irá apagar todos os dados atuais da sua base de dados e da pasta de dados e substituí-los pelo conteúdo deste backup. {cannot-be-undone} Se o restauro for bem-sucedido, a sua sessão será encerrada.",
"cannot-be-undone": "Esta acção não pode ser desfeita - use com prudência.", "cannot-be-undone": "Esta acção não pode ser desfeita - use com prudência.",
"postgresql-note": "Se estiver a usar PostGreSQL, por favor reveja o {backup-restore-process} antes de restaurar.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "processo de backup/restauro na documentação", "backup-restore-process-in-the-documentation": "processo de backup/restauro na documentação",
"irreversible-acknowledgment": "Eu entendo que esta ação é irreversível, destrutiva e pode causar perda de dados", "irreversible-acknowledgment": "Eu entendo que esta ação é irreversível, destrutiva e pode causar perda de dados",
"restore-backup": "Restaurar Backup" "restore-backup": "Restaurar Backup"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Combinar os alimentos selecionados irá juntar o alimento de origem e o alimento alvo num alimento único. O alimento de origem será eliminado e todas as referências a este serão atualizadas para apontar para o alimento alvo.", "merge-dialog-text": "Combinar os alimentos selecionados irá juntar o alimento de origem e o alimento alvo num alimento único. O alimento de origem será eliminado e todas as referências a este serão atualizadas para apontar para o alimento alvo.",
"merge-food-example": "A juntar {food1} com {food2}", "merge-food-example": "A juntar {food1} com {food2}",
"seed-dialog-text": "Popule a base de dados com alimentos no seu idioma local. Isto irá criar 200+ alimentos comuns que podem ser usados para organizar a sua base de dados. Os alimentos são traduzidos por via do esforço da comunidade.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Já tem alguns itens na sua base de dados. Esta ação não vai reconciliar duplicados. Terá de os gerir manualmente.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Combinar Alimentos", "combine-food": "Combinar Alimentos",
"source-food": "Alimento de Origem", "source-food": "Alimento de Origem",
"target-food": "Alimento Alvo", "target-food": "Alimento Alvo",

View file

@ -46,7 +46,7 @@
"category-update-failed": "Actualizarea categoriei a eșuat", "category-update-failed": "Actualizarea categoriei a eșuat",
"category-updated": "Categorie actualizată", "category-updated": "Categorie actualizată",
"uncategorized-count": "Necategorizate {count}", "uncategorized-count": "Necategorizate {count}",
"create-a-category": "Creați o categorie", "create-a-category": "Creează o categorie",
"category-name": "Nume categorie", "category-name": "Nume categorie",
"category": "Categorie" "category": "Categorie"
}, },
@ -579,7 +579,6 @@
"made-this": "Am făcut asta", "made-this": "Am făcut asta",
"how-did-it-turn-out": "Cum a ieșit?", "how-did-it-turn-out": "Cum a ieșit?",
"user-made-this": "{user} a făcut asta", "user-made-this": "{user} a făcut asta",
"last-made-date": "Ultima preparare {date}",
"api-extras-description": "Recipes extras sunt o caracteristică cheie a API-ului Mealie. Îți permit să creezi perechi personalizate de cheie/valoare JSON într-o rețetă, ca să faci referire la aplicații terțe. Puteți utiliza aceste chei pentru a furniza informații, de exemplu pentru a declanșa automatizări sau mesaje personalizate pentru a transmite dispozitivul dorit.", "api-extras-description": "Recipes extras sunt o caracteristică cheie a API-ului Mealie. Îți permit să creezi perechi personalizate de cheie/valoare JSON într-o rețetă, ca să faci referire la aplicații terțe. Puteți utiliza aceste chei pentru a furniza informații, de exemplu pentru a declanșa automatizări sau mesaje personalizate pentru a transmite dispozitivul dorit.",
"message-key": "Cheie mesaj", "message-key": "Cheie mesaj",
"parse": "Parsează", "parse": "Parsează",
@ -647,7 +646,6 @@
"nextStep": "Pasul următor", "nextStep": "Pasul următor",
"recipe-actions": "Acțiuni rețetă", "recipe-actions": "Acțiuni rețetă",
"parser": { "parser": {
"experimental-alert-text": "Mealie foloseşte procesarea limbajului natural pentru a prelucra şi crea unităţi şi alimente pentru ingredientele reţetei. Această funcție este experimentală și este posibil să nu funcționeze întotdeauna conform așteptărilor. Dacă preferați să nu utilizați rezultatele analizate, puteți selecta 'Cancel' și modificările dvs. nu vor fi salvate.",
"ingredient-parser": "Analizator de ingrediente", "ingredient-parser": "Analizator de ingrediente",
"explanation": "Pentru a utiliza analizatorul ingredientelor, faceți clic pe butonul „Analiză tot” pentru a începe procesul. Odată ce ingredientele procesate sunt disponibile, puteți revizui articolele și verifica dacă acestea au fost analizate corect. Scorul de încredere al modelului este afișat în dreapta titlului articolului. Acest scor este o medie a tuturor scorurilor individuale și este posibil să nu fie întotdeauna complet exact.", "explanation": "Pentru a utiliza analizatorul ingredientelor, faceți clic pe butonul „Analiză tot” pentru a începe procesul. Odată ce ingredientele procesate sunt disponibile, puteți revizui articolele și verifica dacă acestea au fost analizate corect. Scorul de încredere al modelului este afișat în dreapta titlului articolului. Acest scor este o medie a tuturor scorurilor individuale și este posibil să nu fie întotdeauna complet exact.",
"alerts-explainer": "Vor fi afișate alerte in cazul in care un aliment sau o unitate au fost găsite, dar nu exista in baza de date.", "alerts-explainer": "Vor fi afișate alerte in cazul in care un aliment sau o unitate au fost găsite, dar nu exista in baza de date.",
@ -722,7 +720,7 @@
"backup-restore": "Restaurare backup", "backup-restore": "Restaurare backup",
"back-restore-description": "Restaurarea acestui backup va suprascrie toate datele curente din baza de date și din folderul de date și le va înlocui cu conținutul acestei copii de rezervă. {cannot-be-undone} Dacă restaurarea are succes, vei fi deconectat.", "back-restore-description": "Restaurarea acestui backup va suprascrie toate datele curente din baza de date și din folderul de date și le va înlocui cu conținutul acestei copii de rezervă. {cannot-be-undone} Dacă restaurarea are succes, vei fi deconectat.",
"cannot-be-undone": "Această acțiune nu poate fi anulată - utilizează cu prudență.", "cannot-be-undone": "Această acțiune nu poate fi anulată - utilizează cu prudență.",
"postgresql-note": "Dacă utilizezi PostGreSQL, te rog să verifici {backup-restore-process} înainte de a restaura.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "procesul de backup/restaurare în documentație", "backup-restore-process-in-the-documentation": "procesul de backup/restaurare în documentație",
"irreversible-acknowledgment": "Înțeleg că această acțiune este ireversibilă, distructivă și poate provoca pierderea datelor", "irreversible-acknowledgment": "Înțeleg că această acțiune este ireversibilă, distructivă și poate provoca pierderea datelor",
"restore-backup": "Restaurează backup" "restore-backup": "Restaurează backup"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Combinarea alimentelor selectate va fuziona alimentul sursă și alimentul țintă într-un singur aliment. Alimentul sursă va fi șters, iar toate referințele către alimentul sursă vor fi actualizate pentru a indica alimentul țintă.", "merge-dialog-text": "Combinarea alimentelor selectate va fuziona alimentul sursă și alimentul țintă într-un singur aliment. Alimentul sursă va fi șters, iar toate referințele către alimentul sursă vor fi actualizate pentru a indica alimentul țintă.",
"merge-food-example": "Combinarea {food1} în {food2}", "merge-food-example": "Combinarea {food1} în {food2}",
"seed-dialog-text": "Populează baza de date cu alimente în funcție de limba ta locală. Aceasta va crea peste 200 de alimente comune care pot fi utilizate pentru a organiza baza de date. Alimentele sunt traduse printr-un efort comunitar.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Aveți deja unele elemente în baza dvs. de date. Această acțiune nu va reconcilia duplicatele, va trebui să le gestionați manual.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Combină mâncarea", "combine-food": "Combină mâncarea",
"source-food": "Sursa de mâncare", "source-food": "Sursa de mâncare",
"target-food": "Mâncare țintită", "target-food": "Mâncare țintită",

View file

@ -579,7 +579,6 @@
"made-this": "Я сделал это", "made-this": "Я сделал это",
"how-did-it-turn-out": "Что получилось?", "how-did-it-turn-out": "Что получилось?",
"user-made-this": "{user} сделал это", "user-made-this": "{user} сделал это",
"last-made-date": "Последний раз сделано {date}",
"api-extras-description": "Дополнения к рецептам являются ключевым элементом Mealie API. Они позволяют создавать пользовательские пары json ключ/значение в рецепте для ссылания на другие приложения. Вы можете использовать эти ключи, чтобы сохранить нужную информацию, например, для автоматизаций или уведомлений на ваши устройства.", "api-extras-description": "Дополнения к рецептам являются ключевым элементом Mealie API. Они позволяют создавать пользовательские пары json ключ/значение в рецепте для ссылания на другие приложения. Вы можете использовать эти ключи, чтобы сохранить нужную информацию, например, для автоматизаций или уведомлений на ваши устройства.",
"message-key": "Ключ сообщения", "message-key": "Ключ сообщения",
"parse": "Обработать", "parse": "Обработать",
@ -647,7 +646,6 @@
"nextStep": "След. шаг", "nextStep": "След. шаг",
"recipe-actions": "Действия с рецептом", "recipe-actions": "Действия с рецептом",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Разделитель ингредиентов", "ingredient-parser": "Разделитель ингредиентов",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Оповещение появится если подходящие продукты или единица измерения найдены, но не занесены в базу данных.", "alerts-explainer": "Оповещение появится если подходящие продукты или единица измерения найдены, но не занесены в базу данных.",
@ -722,7 +720,7 @@
"backup-restore": "Восстановление резервной копии", "backup-restore": "Восстановление резервной копии",
"back-restore-description": "Восстановление этой резервной копии перезапишет все текущие данные в вашей базе данных и в каталоге данных и заменит их содержимым этой резервной копии. {cannot-be-undone} при успешном восстановлении вы выйдете из системы.", "back-restore-description": "Восстановление этой резервной копии перезапишет все текущие данные в вашей базе данных и в каталоге данных и заменит их содержимым этой резервной копии. {cannot-be-undone} при успешном восстановлении вы выйдете из системы.",
"cannot-be-undone": "Это действие нельзя отменить, используйте с осторожностью.", "cannot-be-undone": "Это действие нельзя отменить, используйте с осторожностью.",
"postgresql-note": "Если вы используете PostGreSQL, пожалуйста, просмотрите {backup-restore-process} перед восстановлением.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "процесс резервного копирования/восстановления в документации", "backup-restore-process-in-the-documentation": "процесс резервного копирования/восстановления в документации",
"irreversible-acknowledgment": "Я понимаю, что это действие является необратимым, разрушительным и может привести к потере данных", "irreversible-acknowledgment": "Я понимаю, что это действие является необратимым, разрушительным и может привести к потере данных",
"restore-backup": "Восстановить резервную копию" "restore-backup": "Восстановить резервную копию"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Сочетание выбранных продуктов позволит объединить первый и второй продукт в один. Первый продукт будет удалён, и все ссылки на него будут указывать на второй продукт.", "merge-dialog-text": "Сочетание выбранных продуктов позволит объединить первый и второй продукт в один. Первый продукт будет удалён, и все ссылки на него будут указывать на второй продукт.",
"merge-food-example": "Объединение {food1} в {food2}", "merge-food-example": "Объединение {food1} в {food2}",
"seed-dialog-text": "Заполняет базу данных с продуктами на основе локального языка. Это добавит 200+ типичных продуктов, которые могут быть использованы для организации вашей базы данных. Продукты переводятся с помощью усилий сообщества.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "У вас уже есть некоторые элементы в базе данных. Это действие не позволит удалить дубликаты, вам придется проверить их вручную.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Объединить продукты", "combine-food": "Объединить продукты",
"source-food": "Первый продукт", "source-food": "Первый продукт",
"target-food": "Второй продукт", "target-food": "Второй продукт",

View file

@ -15,7 +15,7 @@
"docs": "Dokumentácia", "docs": "Dokumentácia",
"download-log": "Záznam sťahovania", "download-log": "Záznam sťahovania",
"download-recipe-json": "Posledný získaný JSON", "download-recipe-json": "Posledný získaný JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Riadky záznamu", "log-lines": "Riadky záznamu",
"not-demo": "Nie Demo", "not-demo": "Nie Demo",
"portfolio": "Portfólio", "portfolio": "Portfólio",
@ -579,7 +579,6 @@
"made-this": "Toto som uvaril", "made-this": "Toto som uvaril",
"how-did-it-turn-out": "Ako to dopadlo?", "how-did-it-turn-out": "Ako to dopadlo?",
"user-made-this": "{user} toto uvaril/-a", "user-made-this": "{user} toto uvaril/-a",
"last-made-date": "Posledne pripravené {date}",
"api-extras-description": "API dolnky receptov sú kľúčovou funkcionalitou Mealie API. Umožňujú užívateľom vytvárať vlastné JSON páry kľúč/hodnota v rámci receptu, a využiť v aplikáciách tretích strán. Údaje uložené pod jednotlivými kľúčmi je možné využiť napríklad ako spúšťač automatizovaných procesov, či pri zasielaní vlastných správ do vami zvolených zariadení.", "api-extras-description": "API dolnky receptov sú kľúčovou funkcionalitou Mealie API. Umožňujú užívateľom vytvárať vlastné JSON páry kľúč/hodnota v rámci receptu, a využiť v aplikáciách tretích strán. Údaje uložené pod jednotlivými kľúčmi je možné využiť napríklad ako spúšťač automatizovaných procesov, či pri zasielaní vlastných správ do vami zvolených zariadení.",
"message-key": "Kľúč správy", "message-key": "Kľúč správy",
"parse": "Analyzovať", "parse": "Analyzovať",
@ -647,7 +646,6 @@
"nextStep": "Ďalší krok", "nextStep": "Ďalší krok",
"recipe-actions": "Akcie s receptom", "recipe-actions": "Akcie s receptom",
"parser": { "parser": {
"experimental-alert-text": "Mealie používa spracovanie prirodzeného jazyka na analýzu a vytváranie jednotiek a potravín pre ingrediencie vášho receptu. Táto funkcia je experimentálna a nemusí vždy fungovať podľa očakávania. Ak nechcete použiť analyzované výsledky, môžete vybrať možnosť „Zrušiť“ a vaše zmeny sa neuložia.",
"ingredient-parser": "Parser ingrediencií", "ingredient-parser": "Parser ingrediencií",
"explanation": "Ak chcete použiť parser ingrediencií, kliknutím na tlačidlo „Spracovať všetko“ spustite proces parsovania. Keď budú spracované ingrediencie k dispozícii, môžete položky skontrolovať a overiť, či boli správne analyzované. Skóre spoľahlivosti modelu sa zobrazuje napravo od názvu položky. Toto skóre je priemerom všetkých individuálnych skóre a nemusí byť vždy úplne presné.", "explanation": "Ak chcete použiť parser ingrediencií, kliknutím na tlačidlo „Spracovať všetko“ spustite proces parsovania. Keď budú spracované ingrediencie k dispozícii, môžete položky skontrolovať a overiť, či boli správne analyzované. Skóre spoľahlivosti modelu sa zobrazuje napravo od názvu položky. Toto skóre je priemerom všetkých individuálnych skóre a nemusí byť vždy úplne presné.",
"alerts-explainer": "Upozornenia sa zobrazia, ak sa nájde zodpovedajúce jedlo alebo jednotka, ktoré v databáze ešte neexistuje.", "alerts-explainer": "Upozornenia sa zobrazia, ak sa nájde zodpovedajúce jedlo alebo jednotka, ktoré v databáze ešte neexistuje.",
@ -722,7 +720,7 @@
"backup-restore": "Uložiť zálohu", "backup-restore": "Uložiť zálohu",
"back-restore-description": "Obnovenie tejto zálohy prepíše všetky aktuálne údaje vo vašej databáze a dáta v dátovom adresári a nahradí ich obsahom tejto zálohy. {cannot-be-undone} Po úspešnom obnovení budete odhlásený.", "back-restore-description": "Obnovenie tejto zálohy prepíše všetky aktuálne údaje vo vašej databáze a dáta v dátovom adresári a nahradí ich obsahom tejto zálohy. {cannot-be-undone} Po úspešnom obnovení budete odhlásený.",
"cannot-be-undone": "Túto akciu nie je možné vrátiť späť - používajte s rozvahou.", "cannot-be-undone": "Túto akciu nie je možné vrátiť späť - používajte s rozvahou.",
"postgresql-note": "Ak používate PostGreSQL, prosím, skontrolujte {backup-restore-process} pred samotným obnovením.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "proces zálohovania/obnovenia v dokumentácii", "backup-restore-process-in-the-documentation": "proces zálohovania/obnovenia v dokumentácii",
"irreversible-acknowledgment": "Rozumiem, že táto akcia je nevratná, deštruktívna a môže spôsobiť stratu dát", "irreversible-acknowledgment": "Rozumiem, že táto akcia je nevratná, deštruktívna a môže spôsobiť stratu dát",
"restore-backup": "Obnoviť zálohu" "restore-backup": "Obnoviť zálohu"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Kombináciou vybraných potravín sa zdrojové jedlo a cieľové jedlo zlúčia do jedného jedla. Zdrojové jedlo bude vymazané a všetky odkazy na zdrojové jedlo budú aktualizované tak, aby ukazovali na cieľové jedlo.", "merge-dialog-text": "Kombináciou vybraných potravín sa zdrojové jedlo a cieľové jedlo zlúčia do jedného jedla. Zdrojové jedlo bude vymazané a všetky odkazy na zdrojové jedlo budú aktualizované tak, aby ukazovali na cieľové jedlo.",
"merge-food-example": "Zlučujem {food1} do {food2}", "merge-food-example": "Zlučujem {food1} do {food2}",
"seed-dialog-text": "Naplniť databázu jedlom na základe vášho lokálneho jazyku. Tým sa vytvorí viac ako 200 bežných potravín, ktoré možno použiť na usporiadanie databázy. Jedlá sa prekladajú prostredníctvom úsilia komunity.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "V databáze už máte nejaké položky. Táto akcia nezjednotí duplikáty, budete ich musieť spravovať manuálne.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Kombinované jedlo", "combine-food": "Kombinované jedlo",
"source-food": "Zdrojové jedlo", "source-food": "Zdrojové jedlo",
"target-food": "Cieľové jedlo", "target-food": "Cieľové jedlo",

View file

@ -15,7 +15,7 @@
"docs": "Dokumentacija", "docs": "Dokumentacija",
"download-log": "Prenesi dnevniške zapise", "download-log": "Prenesi dnevniške zapise",
"download-recipe-json": "Zadnji prebran JSON", "download-recipe-json": "Zadnji prebran JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Vrstice", "log-lines": "Vrstice",
"not-demo": "Ni testno", "not-demo": "Ni testno",
"portfolio": "Portfelj", "portfolio": "Portfelj",
@ -579,7 +579,6 @@
"made-this": "Naredil sem to", "made-this": "Naredil sem to",
"how-did-it-turn-out": "Kako se je izkazalo?", "how-did-it-turn-out": "Kako se je izkazalo?",
"user-made-this": "{user} je tole pripravil/a", "user-made-this": "{user} je tole pripravil/a",
"last-made-date": "Nazadnje pripravljen {date}",
"api-extras-description": "Dodatni podatki za recepte so ključna funkcionalnost Mealie APIja. Omogočajo ustvarjanje lastnih JSON ključ / vrednost parov v okviru recepta, da lahko do njih dostopajo zunanje aplikacije. Te ključe lahko uporabiš za posredovanje informacij, na primer za sprožanje avtomatike ali sporočanje prilagojenih sporočil na poljubno napravo.", "api-extras-description": "Dodatni podatki za recepte so ključna funkcionalnost Mealie APIja. Omogočajo ustvarjanje lastnih JSON ključ / vrednost parov v okviru recepta, da lahko do njih dostopajo zunanje aplikacije. Te ključe lahko uporabiš za posredovanje informacij, na primer za sprožanje avtomatike ali sporočanje prilagojenih sporočil na poljubno napravo.",
"message-key": "Ključ sporočila", "message-key": "Ključ sporočila",
"parse": "Razloči", "parse": "Razloči",
@ -647,7 +646,6 @@
"nextStep": "Naslednji korak", "nextStep": "Naslednji korak",
"recipe-actions": "Opravila na receptu", "recipe-actions": "Opravila na receptu",
"parser": { "parser": {
"experimental-alert-text": "Mealie uporablja procesiranje naravnega jezika za razčlenjevanje in ustvarjanje živil in enot v seznamu sestavin. Ta storitev je eksperimentalna in včasih ne deluje kot pričakovano. Če dobljenega rezultata ne želiš uporabiti, izberi 'Prekliči' in tvoje spremembe ne bodo shranjene.",
"ingredient-parser": "Razčlenjevalnik sestavin", "ingredient-parser": "Razčlenjevalnik sestavin",
"explanation": "Če želiš uporabiti razčlenjevalnik sestavin, izberi 'Razčleni vse', da pričneš s postopkom. Ko bodo sestavine na voljo, lahko pregledaš podatke in preveriš, če so bili pravilno razčlenjeni. Stopnja zaupanja je prikazana desno od podatka. Ta vrednost je povprečje vseh posameznih vrednosti in ni nujno popolnoma natančna.", "explanation": "Če želiš uporabiti razčlenjevalnik sestavin, izberi 'Razčleni vse', da pričneš s postopkom. Ko bodo sestavine na voljo, lahko pregledaš podatke in preveriš, če so bili pravilno razčlenjeni. Stopnja zaupanja je prikazana desno od podatka. Ta vrednost je povprečje vseh posameznih vrednosti in ni nujno popolnoma natančna.",
"alerts-explainer": "Opozorila bodo prikazana v primeru, da obstaja ujemajoče živilo ali enota, ampak še ne obstaja v podatkovni bazi.", "alerts-explainer": "Opozorila bodo prikazana v primeru, da obstaja ujemajoče živilo ali enota, ampak še ne obstaja v podatkovni bazi.",
@ -722,7 +720,7 @@
"backup-restore": "Obnovitev varnostne kopije", "backup-restore": "Obnovitev varnostne kopije",
"back-restore-description": "Obnavljanje varnostne kopije bo prepisalo trenutne podatke v podatkovni zbirki in v podatkovni mapi in jih zamenjalo s podatki v tej varnostni kopiji. {cannot-be-undone} Če je obnavljanje varnostne kopije uspešno, te bo sistem na koncu izpisal iz tvojega uporabniškega računa.", "back-restore-description": "Obnavljanje varnostne kopije bo prepisalo trenutne podatke v podatkovni zbirki in v podatkovni mapi in jih zamenjalo s podatki v tej varnostni kopiji. {cannot-be-undone} Če je obnavljanje varnostne kopije uspešno, te bo sistem na koncu izpisal iz tvojega uporabniškega računa.",
"cannot-be-undone": "Te akcije ni mogoče razveljaviti - uporabljaj previdno.", "cannot-be-undone": "Te akcije ni mogoče razveljaviti - uporabljaj previdno.",
"postgresql-note": "Če uporabljaš PostGreSQL, preveri {backup-restore-process} preden pričneš z obnavljanje varnostne kopije.", "postgresql-note": "Če uporabljate PostgreSQL, pred obnovitvijo preglejte {backup-restore-process}.",
"backup-restore-process-in-the-documentation": "postopek ustvarjanja in obnavljanja varnostne kopije v dokumentaciji", "backup-restore-process-in-the-documentation": "postopek ustvarjanja in obnavljanja varnostne kopije v dokumentaciji",
"irreversible-acknowledgment": "Razumem, da tega ukaza ni mogoče razveljaviti in da lahko povzroči izgubo podatkov", "irreversible-acknowledgment": "Razumem, da tega ukaza ni mogoče razveljaviti in da lahko povzroči izgubo podatkov",
"restore-backup": "Obnovi varnostno kopijo" "restore-backup": "Obnovi varnostno kopijo"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Združitev izbranih živil bo združila izvorno živilo in ciljno živilo v eno samo živilo. Izvorno živilo bo izbrisano in vse povezave na izvorno živilo, bodo po novem kazale na ciljno živilo.", "merge-dialog-text": "Združitev izbranih živil bo združila izvorno živilo in ciljno živilo v eno samo živilo. Izvorno živilo bo izbrisano in vse povezave na izvorno živilo, bodo po novem kazale na ciljno živilo.",
"merge-food-example": "Združujem {food1} v {food2}", "merge-food-example": "Združujem {food1} v {food2}",
"seed-dialog-text": "Napolni podatkovno bazo s jedmi, ki izvirajo iz vašega lokalnega jezika. To bo kreiralo 200+ običajnih jedi, ki se lahko uporabijo za organizacijo vaše podatkovne baze. Jedi so prevedene s pomočjo skupnosti.", "seed-dialog-text": "Napolnite zbirko podatkov z živili, ki temeljijo na vašem lokalnem jeziku. Tako boste ustvarili več kot 200 običajnih živil, ki jih lahko uporabite za organizacijo vaše zbirke podatkov. Živila so prevedena s prizadevanjem skupnosti.",
"seed-dialog-warning": "Nekatere elemente že imate v podatkovni bazi. To opravilo ne bo upoštevalo dvojnikov in jih boste morali sami ročno upravljati.", "seed-dialog-warning": "Nekaj elementov že imate v svoji bazi podatkov. To dejanje ne bo uskladilo dvojnikov, upravljati jih boste morali ročno.",
"combine-food": "Združi živila", "combine-food": "Združi živila",
"source-food": "Izvorno živilo", "source-food": "Izvorno živilo",
"target-food": "Ciljno živilo", "target-food": "Ciljno živilo",

View file

@ -15,7 +15,7 @@
"docs": "Документација", "docs": "Документација",
"download-log": "Преузми дневник евиденције", "download-log": "Преузми дневник евиденције",
"download-recipe-json": "Последњи прикупљени JSON", "download-recipe-json": "Последњи прикупљени JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Log Lines", "log-lines": "Log Lines",
"not-demo": "Није демо", "not-demo": "Није демо",
"portfolio": "Портфолио", "portfolio": "Портфолио",
@ -579,7 +579,6 @@
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Последњи пут прављено {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Backup Restore", "backup-restore": "Backup Restore",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.", "cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore process in the documentation", "backup-restore-process-in-the-documentation": "backup/restore process in the documentation",
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss", "irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
"restore-backup": "Restore Backup" "restore-backup": "Restore Backup"

View file

@ -15,7 +15,7 @@
"docs": "Dokumentation", "docs": "Dokumentation",
"download-log": "Ladda ner logg", "download-log": "Ladda ner logg",
"download-recipe-json": "Senast hämtad JSON", "download-recipe-json": "Senast hämtad JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Loggrader", "log-lines": "Loggrader",
"not-demo": "Inte Demo", "not-demo": "Inte Demo",
"portfolio": "Portfölj", "portfolio": "Portfölj",
@ -45,7 +45,7 @@
"category-filter": "Kategorifilter", "category-filter": "Kategorifilter",
"category-update-failed": "Kategori gick inte att uppdatera", "category-update-failed": "Kategori gick inte att uppdatera",
"category-updated": "Kategori uppdaterad", "category-updated": "Kategori uppdaterad",
"uncategorized-count": "Ingen Kategori {count}", "uncategorized-count": "Utan kategori {count}",
"create-a-category": "Skapa kategori", "create-a-category": "Skapa kategori",
"category-name": "Kategorinamn", "category-name": "Kategorinamn",
"category": "Kategori" "category": "Kategori"
@ -579,7 +579,6 @@
"made-this": "Jag lagade den här", "made-this": "Jag lagade den här",
"how-did-it-turn-out": "Hur blev rätten?", "how-did-it-turn-out": "Hur blev rätten?",
"user-made-this": "{user} lagade detta", "user-made-this": "{user} lagade detta",
"last-made-date": "Senast lagad {date}",
"api-extras-description": "Recept API-tillägg är en viktig funktion i Mealie's API. Med hjälp av dem kan du skapa anpassade JSON-nyckel/värdepar i ett recept, som du kan referera till från tredjepartsapplikationer. Du kan använda dessa nycklar för att tillhandahålla information, till exempel för att trigga automatiseringar eller anpassade meddelanden som ska vidarebefordras till önskad enhet.", "api-extras-description": "Recept API-tillägg är en viktig funktion i Mealie's API. Med hjälp av dem kan du skapa anpassade JSON-nyckel/värdepar i ett recept, som du kan referera till från tredjepartsapplikationer. Du kan använda dessa nycklar för att tillhandahålla information, till exempel för att trigga automatiseringar eller anpassade meddelanden som ska vidarebefordras till önskad enhet.",
"message-key": "Meddelandenyckel", "message-key": "Meddelandenyckel",
"parse": "Läs in", "parse": "Läs in",
@ -647,7 +646,6 @@
"nextStep": "Nästa steg", "nextStep": "Nästa steg",
"recipe-actions": "Recept åtgärder", "recipe-actions": "Recept åtgärder",
"parser": { "parser": {
"experimental-alert-text": "Mealie använder naturligt språk för att tolka enheter och livsmedel som behövs för dina recept. Denna funktion är experimentell och kanske inte alltid funkar som förväntat. Om du föredrar att inte använda de tolkade resultatet, kan du välja 'Avbryt' och förändringarna kommer då inte sparas.",
"ingredient-parser": "Ingrediensanalysator", "ingredient-parser": "Ingrediensanalysator",
"explanation": "För att använda ingrediensen parser, klicka på \"Analysera allt\" knappen för att starta processen. När de bearbetade ingredienserna är tillgängliga, kan du granska objekten och kontrollera att de tolkades korrekt. Modellens självförtroende poäng visas till höger om artikelns titel. Denna poäng är ett genomsnitt av alla individuella poäng och kanske inte alltid vara helt korrekt.", "explanation": "För att använda ingrediensen parser, klicka på \"Analysera allt\" knappen för att starta processen. När de bearbetade ingredienserna är tillgängliga, kan du granska objekten och kontrollera att de tolkades korrekt. Modellens självförtroende poäng visas till höger om artikelns titel. Denna poäng är ett genomsnitt av alla individuella poäng och kanske inte alltid vara helt korrekt.",
"alerts-explainer": "Varning kommer visas om en matchande ingrediens eller enhet hittas, men inte existerar i databasen.", "alerts-explainer": "Varning kommer visas om en matchande ingrediens eller enhet hittas, men inte existerar i databasen.",
@ -722,7 +720,7 @@
"backup-restore": "Återställ backup", "backup-restore": "Återställ backup",
"back-restore-description": "Återställning av den här backuppen kommer att skriva över all information i databasen och datakatalogen och ersätta allt med innehållet i nackuppen. {cannot-be-undone} Om återställningen går bra kommer du att loggas ut.", "back-restore-description": "Återställning av den här backuppen kommer att skriva över all information i databasen och datakatalogen och ersätta allt med innehållet i nackuppen. {cannot-be-undone} Om återställningen går bra kommer du att loggas ut.",
"cannot-be-undone": "Denna åtgärd kan inte ångras - använd med försiktighet.", "cannot-be-undone": "Denna åtgärd kan inte ångras - använd med försiktighet.",
"postgresql-note": "Om du använder PostGreSQL, vänligen granska {backup-restore-process} innan du återställer.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "säkerhetskopiering/återställning i dokumentationen", "backup-restore-process-in-the-documentation": "säkerhetskopiering/återställning i dokumentationen",
"irreversible-acknowledgment": "Jag förstår att denna åtgärd är oåterkallelig, destruktiv och kan orsaka dataförlust", "irreversible-acknowledgment": "Jag förstår att denna åtgärd är oåterkallelig, destruktiv och kan orsaka dataförlust",
"restore-backup": "Återställ säkerhetskopia" "restore-backup": "Återställ säkerhetskopia"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Kombinera valda livsmedel kommer att slå samman de valda livsmedlen till ett livsmedel. Ursprungslivsmedlet kommer att raderas och alla hänvisningar till detta kommer att uppdateras för att peka på det kombinerade livsmedlet.", "merge-dialog-text": "Kombinera valda livsmedel kommer att slå samman de valda livsmedlen till ett livsmedel. Ursprungslivsmedlet kommer att raderas och alla hänvisningar till detta kommer att uppdateras för att peka på det kombinerade livsmedlet.",
"merge-food-example": "Slå ihop {food1} till {food2}", "merge-food-example": "Slå ihop {food1} till {food2}",
"seed-dialog-text": "Fyll databasen med livsmedel baserade på ditt språk. Detta kommer att skapa 200+ vanliga livsmedel som kan användas för att organisera din databas. Livsmedlen översätts via ett gemenskapsinsats.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Du har redan några objekt i din databas. Denna åtgärd kommer inte att förena dubbletter, du kommer att behöva hantera dem manuellt.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Kombinera mat", "combine-food": "Kombinera mat",
"source-food": "Matens källa", "source-food": "Matens källa",
"target-food": "Matens mål", "target-food": "Matens mål",

View file

@ -579,7 +579,6 @@
"made-this": "Bunu ben yaptım", "made-this": "Bunu ben yaptım",
"how-did-it-turn-out": "Nasıl oldu?", "how-did-it-turn-out": "Nasıl oldu?",
"user-made-this": "{user} bunu yaptı", "user-made-this": "{user} bunu yaptı",
"last-made-date": "En Son {date} Yapıldı",
"api-extras-description": "Tarif ekstraları Mealie API'nin önemli bir özelliğidir. Üçüncü taraf uygulamalardan referans almak üzere bir tarif içinde özel JSON anahtar/değer çiftleri oluşturmanıza olanak tanır. Bu tuşları, örneğin otomasyonları tetiklemek veya istediğiniz cihaza iletilecek özel mesajları bilgi sağlamak için kullanabilirsiniz.", "api-extras-description": "Tarif ekstraları Mealie API'nin önemli bir özelliğidir. Üçüncü taraf uygulamalardan referans almak üzere bir tarif içinde özel JSON anahtar/değer çiftleri oluşturmanıza olanak tanır. Bu tuşları, örneğin otomasyonları tetiklemek veya istediğiniz cihaza iletilecek özel mesajları bilgi sağlamak için kullanabilirsiniz.",
"message-key": "İleti Anahtarı", "message-key": "İleti Anahtarı",
"parse": "Ayrıştırma", "parse": "Ayrıştırma",
@ -647,7 +646,6 @@
"nextStep": "Sonraki adım", "nextStep": "Sonraki adım",
"recipe-actions": "Tarif İşlemleri", "recipe-actions": "Tarif İşlemleri",
"parser": { "parser": {
"experimental-alert-text": "Mealie, tarif malzemeleriniz için birimleri ve yiyecek öğelerini ayrıştırıp oluşturmak için doğal dil işlemeyi kullanır. Bu özellik deneyseldir ve her zaman beklendiği gibi çalışmayabilir. Ayrıştırılan sonuçları kullanmamayı tercih ederseniz 'İptal'i seçebilirsiniz; değişiklikleriniz kaydedilmeyecektir.",
"ingredient-parser": "Malzeme Ayrıştırıcı", "ingredient-parser": "Malzeme Ayrıştırıcı",
"explanation": "Malzeme ayrıştırıcıyı kullanmak için işlemi başlatmak üzere 'Tümünü Ayrıştır' düğmesine tıklayın. İşlenmiş malzemeler mevcut olduğunda öğeleri inceleyebilir ve bunların doğru şekilde ayrıştırıldığını doğrulayabilirsiniz. Modelin güven puanı öğe başlığının sağında görüntülenir. Bu puan, tüm bireysel puanların ortalamasıdır ve her zaman tam olarak doğru olmayabilir.", "explanation": "Malzeme ayrıştırıcıyı kullanmak için işlemi başlatmak üzere 'Tümünü Ayrıştır' düğmesine tıklayın. İşlenmiş malzemeler mevcut olduğunda öğeleri inceleyebilir ve bunların doğru şekilde ayrıştırıldığını doğrulayabilirsiniz. Modelin güven puanı öğe başlığının sağında görüntülenir. Bu puan, tüm bireysel puanların ortalamasıdır ve her zaman tam olarak doğru olmayabilir.",
"alerts-explainer": "Eşleşen bir gıda veya birim bulunursa fakat veritabanında mevcut değilse uyarılar görüntülenecektir.", "alerts-explainer": "Eşleşen bir gıda veya birim bulunursa fakat veritabanında mevcut değilse uyarılar görüntülenecektir.",
@ -722,7 +720,7 @@
"backup-restore": "Yedekleme Geri Yükleme", "backup-restore": "Yedekleme Geri Yükleme",
"back-restore-description": "Bu yedeği geri yüklemek, veritabanınızdaki ve veri dizinindeki tüm mevcut verilerin üzerine yazacak ve bunları bu yedeğin içeriğiyle değiştirecektir. {cannot-be-undone} Geri yükleme başarılı olursa oturumunuz kapatılacaktır.", "back-restore-description": "Bu yedeği geri yüklemek, veritabanınızdaki ve veri dizinindeki tüm mevcut verilerin üzerine yazacak ve bunları bu yedeğin içeriğiyle değiştirecektir. {cannot-be-undone} Geri yükleme başarılı olursa oturumunuz kapatılacaktır.",
"cannot-be-undone": "Bu işlem geri alınamaz - dikkatli kullanın.", "cannot-be-undone": "Bu işlem geri alınamaz - dikkatli kullanın.",
"postgresql-note": "Eğer PostGreSQL kullanıyorsanız, geri yüklemeden önce lütfen {backup-restore-process} gözden geçirin.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "belgelerdeki yedekleme/geri yükleme işlemini", "backup-restore-process-in-the-documentation": "belgelerdeki yedekleme/geri yükleme işlemini",
"irreversible-acknowledgment": "Bu işlemin geri döndürülemez, yıkıcı ve veri kaybına neden olabileceğini anlıyorum", "irreversible-acknowledgment": "Bu işlemin geri döndürülemez, yıkıcı ve veri kaybına neden olabileceğini anlıyorum",
"restore-backup": "Yedeği Geri Yükle" "restore-backup": "Yedeği Geri Yükle"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Seçilen gıdaların birleştirilmesi, kaynak gıdayı ve hedef gıdayı tek bir gıdada birleştirecektir. Kaynak gıda silinecek ve kaynak gıdaya yapılan tüm referanslar, hedef gıdayı işaret edecek şekilde güncellenecektir.", "merge-dialog-text": "Seçilen gıdaların birleştirilmesi, kaynak gıdayı ve hedef gıdayı tek bir gıdada birleştirecektir. Kaynak gıda silinecek ve kaynak gıdaya yapılan tüm referanslar, hedef gıdayı işaret edecek şekilde güncellenecektir.",
"merge-food-example": "{food1}, {food2} ile birleştiriliyor", "merge-food-example": "{food1}, {food2} ile birleştiriliyor",
"seed-dialog-text": "Veritabanını yerel dilinize göre gıdalarla tohumlayın. Bu, veritabanınızı düzenlemek için kullanılabilecek 200'den fazla yaygın gıda yaratacaktır. Gıdalar topluluk çabasıyla çevrilmektedir.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "Veritabanınızda zaten bazı öğeler var. Bu eylem kopyaları uzlaştırmaz; bunları manuel olarak yönetmeniz gerekir.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Gıdaları Birleştir", "combine-food": "Gıdaları Birleştir",
"source-food": "Kaynak Gıda", "source-food": "Kaynak Gıda",
"target-food": "Hedef Gıda", "target-food": "Hedef Gıda",

View file

@ -5,7 +5,7 @@
"api-docs": "Документація API", "api-docs": "Документація API",
"api-port": "Порт API", "api-port": "Порт API",
"application-mode": "Режим додатку", "application-mode": "Режим додатку",
"database-type": "Тип бази данних", "database-type": "Тип бази даних",
"database-url": "URL-адреса бази даних", "database-url": "URL-адреса бази даних",
"default-group": "Групи за замовчуванням", "default-group": "Групи за замовчуванням",
"default-household": "Сімʼя за замовчуванням", "default-household": "Сімʼя за замовчуванням",
@ -15,7 +15,7 @@
"docs": "Документація", "docs": "Документація",
"download-log": "Завантажити журнал", "download-log": "Завантажити журнал",
"download-recipe-json": "Останній зібраний JSON", "download-recipe-json": "Останній зібраний JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Журнал", "log-lines": "Журнал",
"not-demo": "Не демо", "not-demo": "Не демо",
"portfolio": "Портфоліо", "portfolio": "Портфоліо",
@ -190,7 +190,7 @@
"a-name-is-required": "Необхідно вказати назву", "a-name-is-required": "Необхідно вказати назву",
"delete-with-name": "Видалити {name}", "delete-with-name": "Видалити {name}",
"confirm-delete-generic-with-name": "Ви дійсно хочете видалити {name}?", "confirm-delete-generic-with-name": "Ви дійсно хочете видалити {name}?",
"confirm-delete-own-admin-account": "Зверніть увагу, що ви намагаєтеся видалити свій обліковий запис адміністратора! Цю дію неможливо скасувати і ви остаточно видалите ваш обліковий запис?", "confirm-delete-own-admin-account": "Зверніть увагу, що ви намагаєтеся видалити свій обліковий запис адміністратора! Цю дію неможливо скасувати й ви остаточно видалите ваш обліковий запис?",
"organizer": "Організатор", "organizer": "Організатор",
"transfer": "Передача", "transfer": "Передача",
"copy": "Скопіювати", "copy": "Скопіювати",
@ -200,7 +200,7 @@
"learn-more": "Дізнатися більше", "learn-more": "Дізнатися більше",
"this-feature-is-currently-inactive": "Ця функція наразі не активна", "this-feature-is-currently-inactive": "Ця функція наразі не активна",
"clipboard-not-supported": "Буфер обміну не підтримується", "clipboard-not-supported": "Буфер обміну не підтримується",
"copied-to-clipboard": "Скопійовано до буферу обміну", "copied-to-clipboard": "Скопійовано до буфера обміну",
"your-browser-does-not-support-clipboard": "Ваш браузер не підтримує буфер обміну", "your-browser-does-not-support-clipboard": "Ваш браузер не підтримує буфер обміну",
"copied-items-to-clipboard": "Жоден елемент не скопійовано в буфер обміну|Один елемент скопійовано в буфер обміну|Скопійовано {count} елементів в буфер обміну", "copied-items-to-clipboard": "Жоден елемент не скопійовано в буфер обміну|Один елемент скопійовано в буфер обміну|Скопійовано {count} елементів в буфер обміну",
"actions": "Дії", "actions": "Дії",
@ -246,14 +246,14 @@
"manage-members": "Керування Користувачами", "manage-members": "Керування Користувачами",
"manage-members-description": "Керуйте дозволами учасників вашої сімʼї. {manage} дозволяє користувачеві отримати доступ до сторінки керування даними {invite} дозволяє користувачеві генерувати посилання запрошення для інших користувачів. Власники групи не можуть змінити власні дозволи.", "manage-members-description": "Керуйте дозволами учасників вашої сімʼї. {manage} дозволяє користувачеві отримати доступ до сторінки керування даними {invite} дозволяє користувачеві генерувати посилання запрошення для інших користувачів. Власники групи не можуть змінити власні дозволи.",
"manage": "Керування", "manage": "Керування",
"manage-household": "Manage Household", "manage-household": "Керувати сімʼєю",
"invite": "Запрошення", "invite": "Запрошення",
"looking-to-update-your-profile": "Бажаєте оновити свій профіль?", "looking-to-update-your-profile": "Бажаєте оновити свій профіль?",
"default-recipe-preferences-description": "Це типові налаштування, коли створюється новий рецепт у вашій групі. Ці параметри можна змінити для окремих рецептів в меню налаштувань рецептів.", "default-recipe-preferences-description": "Це типові налаштування, коли створюється новий рецепт у вашій групі. Ці параметри можна змінити для окремих рецептів в меню налаштувань рецептів.",
"default-recipe-preferences": "Параметри за умовчанням", "default-recipe-preferences": "Параметри за умовчанням",
"group-preferences": "Налаштування групи", "group-preferences": "Налаштування групи",
"private-group": "Приватна група", "private-group": "Приватна група",
"private-group-description": "Setting your group to private will disable all public view options. This overrides any individual public view settings", "private-group-description": "Якщо зробити групу приватною, то всі налаштування публічного перегляду буде скинуто. Це замінить індивідуальні налаштування публічного перегляду",
"enable-public-access": "Дозволити загальний доступ", "enable-public-access": "Дозволити загальний доступ",
"enable-public-access-description": "Робить групові рецепти загальнодоступними за замовчуванням і дозволяє користувачам переглядати рецепти без входу в систему", "enable-public-access-description": "Робить групові рецепти загальнодоступними за замовчуванням і дозволяє користувачам переглядати рецепти без входу в систему",
"allow-users-outside-of-your-group-to-see-your-recipes": "Дозволити користувачам за межами вашої групи бачити ваші рецепти", "allow-users-outside-of-your-group-to-see-your-recipes": "Дозволити користувачам за межами вашої групи бачити ваші рецепти",
@ -277,7 +277,7 @@
"admin-group-management-text": "Зміни до цієї групи будуть відображені негайно.", "admin-group-management-text": "Зміни до цієї групи будуть відображені негайно.",
"group-id-value": "Id групи: {0}", "group-id-value": "Id групи: {0}",
"total-households": "Всього сімей", "total-households": "Всього сімей",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household" "you-must-select-a-group-before-selecting-a-household": "Ви маєте вибрати групу перед тим, як вибирати сім'ю"
}, },
"household": { "household": {
"household": "Сімʼя", "household": "Сімʼя",
@ -292,9 +292,9 @@
"admin-household-management-text": "Зміни до цієї сімʼї будуть відображені негайно.", "admin-household-management-text": "Зміни до цієї сімʼї будуть відображені негайно.",
"household-id-value": "Ідентифікатор сімʼї: {0}", "household-id-value": "Ідентифікатор сімʼї: {0}",
"private-household": "Приватна сімʼя", "private-household": "Приватна сімʼя",
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings", "private-household-description": "Якщо зробити сім'ю приватною, то всі налаштування публічного перегляду буде скинуто. Це замінить індивідуальні налаштування публічного перегляду",
"lock-recipe-edits-from-other-households": "Lock recipe edits from other households", "lock-recipe-edits-from-other-households": "Заблокувати редагування рецептів іншими сім'ями",
"lock-recipe-edits-from-other-households-description": "When enabled only users in your household can edit recipes created by your household", "lock-recipe-edits-from-other-households-description": "Якщо увімкнено, тільки члени вашої сім'ї зможуть редагувати рецепти, які були створені вашою сім'єю",
"household-recipe-preferences": "Налаштування рецептів сімʼї", "household-recipe-preferences": "Налаштування рецептів сімʼї",
"default-recipe-preferences-description": "Це типові налаштування для нового рецепта у вашій сімʼї. Ці параметри можна змінити для окремих рецептів в меню налаштувань рецептів.", "default-recipe-preferences-description": "Це типові налаштування для нового рецепта у вашій сімʼї. Ці параметри можна змінити для окремих рецептів в меню налаштувань рецептів.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Дозволити користувачам за межами вашої сімʼї бачити ваші рецепти", "allow-users-outside-of-your-household-to-see-your-recipes": "Дозволити користувачам за межами вашої сімʼї бачити ваші рецепти",
@ -321,10 +321,10 @@
"mealplan-settings": "Налаштування плану харчування", "mealplan-settings": "Налаштування плану харчування",
"mealplan-update-failed": "Не вдалося оновити план харчування", "mealplan-update-failed": "Не вдалося оновити план харчування",
"mealplan-updated": "План харчування оновлено", "mealplan-updated": "План харчування оновлено",
"mealplan-households-description": "If no household is selected, recipes can be added from any household", "mealplan-households-description": "Якщо жодної сім'ї не вибрано, рецепти можуть бути доданими з будь-якої сім'ї",
"any-category": "Будь-яка категорія", "any-category": "Будь-яка категорія",
"any-tag": "Будь-який тег", "any-tag": "Будь-який тег",
"any-household": "Any Household", "any-household": "Будь-яка сім'я",
"no-meal-plan-defined-yet": "Не створено жодного плану харчування", "no-meal-plan-defined-yet": "Не створено жодного плану харчування",
"no-meal-planned-for-today": "Не заплановано харчування на сьогодні", "no-meal-planned-for-today": "Не заплановано харчування на сьогодні",
"numberOfDays-hint": "Скільки днів завантажувати на сторінку", "numberOfDays-hint": "Скільки днів завантажувати на сторінку",
@ -357,7 +357,7 @@
"for-type-meal-types": "для {0} типів харчування", "for-type-meal-types": "для {0} типів харчування",
"meal-plan-rules": "Правила планів харчування", "meal-plan-rules": "Правила планів харчування",
"new-rule": "Нове правило", "new-rule": "Нове правило",
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the rule filters will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.", "meal-plan-rules-description": "Ви можете створити правила для автоматичного вибору рецептів для ваших планів харчування. Ці правила використовуються сервером для вибору рецептів при створенні плану харчування. Зверніть увагу, що якщо правила мають обмеження на день/тип, то їх категорії будуть об'єднані. Дублювати правила немає сенсу, але можливо.",
"new-rule-description": "При створенні нового правила для плану харчування, ви можете обмежити правило на певний день тижня та/або певний тип їжі. Щоб застосувати правило до всіх днів або всіх типів їжі, ви можете встановити правило \"Будь-який\", що застосовуватиме його до всіх можливих значень для дня та/або типу їжі.", "new-rule-description": "При створенні нового правила для плану харчування, ви можете обмежити правило на певний день тижня та/або певний тип їжі. Щоб застосувати правило до всіх днів або всіх типів їжі, ви можете встановити правило \"Будь-який\", що застосовуватиме його до всіх можливих значень для дня та/або типу їжі.",
"recipe-rules": "Правила рецептів", "recipe-rules": "Правила рецептів",
"applies-to-all-days": "Застосовується до всіх днів", "applies-to-all-days": "Застосовується до всіх днів",
@ -518,7 +518,7 @@
"save-recipe-before-use": "Зберегти рецепт перед використанням", "save-recipe-before-use": "Зберегти рецепт перед використанням",
"section-title": "Назва розділу", "section-title": "Назва розділу",
"servings": "Порції", "servings": "Порції",
"serves-amount": "Serves {amount}", "serves-amount": "Порцій: {amount}",
"share-recipe-message": "Я хотів би поділитися з тобою своїм рецептом {0}.", "share-recipe-message": "Я хотів би поділитися з тобою своїм рецептом {0}.",
"show-nutrition-values": "Показати харчову цінність", "show-nutrition-values": "Показати харчову цінність",
"sodium-content": "Натрій", "sodium-content": "Натрій",
@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Не вдалося додати рецепт до плану харчування", "failed-to-add-recipe-to-mealplan": "Не вдалося додати рецепт до плану харчування",
"failed-to-add-to-list": "Не вдалося додати до списку", "failed-to-add-to-list": "Не вдалося додати до списку",
"yield": "Вихід", "yield": "Вихід",
"yields-amount-with-text": "Yields {amount} {text}", "yields-amount-with-text": "Вийде: {amount} {text}",
"yield-text": "Yield Text", "yield-text": "Текст виходу",
"quantity": "Кількість", "quantity": "Кількість",
"choose-unit": "Виберіть одиниці вимірювання", "choose-unit": "Виберіть одиниці вимірювання",
"press-enter-to-create": "Натисніть Enter, щоб створити", "press-enter-to-create": "Натисніть Enter, щоб створити",
@ -579,7 +579,6 @@
"made-this": "Я це приготував", "made-this": "Я це приготував",
"how-did-it-turn-out": "Як вийшло?", "how-did-it-turn-out": "Як вийшло?",
"user-made-this": "{user} зробив це", "user-made-this": "{user} зробив це",
"last-made-date": "Востаннє приготовано {date}",
"api-extras-description": "Додатки в рецептах - ключова функція API Mealie. Вони дозволяють створювати користувацьку пару JSON ключів та значень в рецепті для сторонніх додатків. Це можна використовувати для автоматизації або для створення користувацьких повідомлень для сторонніх сервісів.", "api-extras-description": "Додатки в рецептах - ключова функція API Mealie. Вони дозволяють створювати користувацьку пару JSON ключів та значень в рецепті для сторонніх додатків. Це можна використовувати для автоматизації або для створення користувацьких повідомлень для сторонніх сервісів.",
"message-key": "Ключ повідомлення", "message-key": "Ключ повідомлення",
"parse": "Проаналізувати", "parse": "Проаналізувати",
@ -647,7 +646,6 @@
"nextStep": "Наступний крок", "nextStep": "Наступний крок",
"recipe-actions": "Дії рецепту", "recipe-actions": "Дії рецепту",
"parser": { "parser": {
"experimental-alert-text": "Mealie використовує аналіз природної мови для аналізу та створення інгредієнтів та одиниць виміру. Це експериментальна функція і може не завжди працювати належним чином. Якщо ви не хочете використовувати результати аналізу виберіть \"Скасувати\", і зміни не будуть збережені.",
"ingredient-parser": "Аналізатор інгредієнтів", "ingredient-parser": "Аналізатор інгредієнтів",
"explanation": "Щоб використати аналізатор інгредієнтів, натисніть кнопку 'Аналізувати все', щоб запустити процес. Після того, як інгредієнти проаналізовані, ви можете їх переглянути та переконатися, що вони були проаналізовані правильно. Оцінка надійності аналізу відображена праворуч від назви елемента. Ця оцінка розраховується як середнє значення усіх індивідуальних оцінок і не завжди може бути абсолютно точним.", "explanation": "Щоб використати аналізатор інгредієнтів, натисніть кнопку 'Аналізувати все', щоб запустити процес. Після того, як інгредієнти проаналізовані, ви можете їх переглянути та переконатися, що вони були проаналізовані правильно. Оцінка надійності аналізу відображена праворуч від назви елемента. Ця оцінка розраховується як середнє значення усіх індивідуальних оцінок і не завжди може бути абсолютно точним.",
"alerts-explainer": "Оповіщення будуть відображатися, якщо знайдені продукти або одиниці знайдені яких не існує в базі даних.", "alerts-explainer": "Оповіщення будуть відображатися, якщо знайдені продукти або одиниці знайдені яких не існує в базі даних.",
@ -662,24 +660,24 @@
"no-food": "Немає їжі" "no-food": "Немає їжі"
}, },
"reset-servings-count": "Скинути кількість порцій", "reset-servings-count": "Скинути кількість порцій",
"not-linked-ingredients": "Additional Ingredients" "not-linked-ingredients": "Додаткові продукти"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Recipe Finder", "recipe-finder": "Шукач рецептів",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.", "recipe-finder-description": "Пошук рецептів базується на продуктах, які ви маєте. Ви також можете фільтрувати за наявними інструментами та встановити максимальну кількість відсутніх продуктів або інструментів.",
"selected-ingredients": "Selected Ingredients", "selected-ingredients": "Вибрані продукти",
"no-ingredients-selected": "No ingredients selected", "no-ingredients-selected": "Жодного продукту не вибрано",
"missing": "Missing", "missing": "Відсутні",
"no-recipes-found": "No recipes found", "no-recipes-found": "Рецептів не знайдено",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters", "no-recipes-found-description": "Спробуйте додати більше продуктів до пошукового списку або підлаштувати фільтри",
"include-ingredients-on-hand": "Include Ingredients On Hand", "include-ingredients-on-hand": "Включити наявні продукти",
"include-tools-on-hand": "Include Tools On Hand", "include-tools-on-hand": "Включити наявні інструменти",
"max-missing-ingredients": "Max Missing Ingredients", "max-missing-ingredients": "Максимум відсутніх продуктів",
"max-missing-tools": "Max Missing Tools", "max-missing-tools": "Максимум відсутніх інструментів",
"selected-tools": "Selected Tools", "selected-tools": "Вибрані інструменти",
"other-filters": "Other Filters", "other-filters": "Інші фільтри",
"ready-to-make": "Ready to Make", "ready-to-make": "Готове до приготування",
"almost-ready-to-make": "Almost Ready to Make" "almost-ready-to-make": "Майже готове до приготування"
}, },
"search": { "search": {
"advanced-search": "Розширений пошук", "advanced-search": "Розширений пошук",
@ -722,7 +720,7 @@
"backup-restore": "Відновлення з резервної копії", "backup-restore": "Відновлення з резервної копії",
"back-restore-description": "Відновлення резервної копії перезапише всі дані вашої бази даних і в каталозі даних і замінить їх вміст вмістом цієї резервної копії. {cannot-be-undone} Якщо відновлення успішне, вас вилогінить з системи.", "back-restore-description": "Відновлення резервної копії перезапише всі дані вашої бази даних і в каталозі даних і замінить їх вміст вмістом цієї резервної копії. {cannot-be-undone} Якщо відновлення успішне, вас вилогінить з системи.",
"cannot-be-undone": "Цю дію не можна скасувати - використовуйте з обережністю.", "cannot-be-undone": "Цю дію не можна скасувати - використовуйте з обережністю.",
"postgresql-note": "Якщо ви використовуєте PostGreSQL, перегляньте {backup-restore-process} перед відновленням.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "резервне копіювання/відновлення в документації", "backup-restore-process-in-the-documentation": "резервне копіювання/відновлення в документації",
"irreversible-acknowledgment": "Я розумію, що ця дія незворотна, руйнівна і може спричинити втрату даних", "irreversible-acknowledgment": "Я розумію, що ця дія незворотна, руйнівна і може спричинити втрату даних",
"restore-backup": "Відновити з резервної копії" "restore-backup": "Відновити з резервної копії"
@ -884,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Ви впевнені, що хочете відмітити всі елементи?", "are-you-sure-you-want-to-check-all-items": "Ви впевнені, що хочете відмітити всі елементи?",
"are-you-sure-you-want-to-uncheck-all-items": "Ви впевнені, що хочете зняти відмітку з усіх елементів?", "are-you-sure-you-want-to-uncheck-all-items": "Ви впевнені, що хочете зняти відмітку з усіх елементів?",
"are-you-sure-you-want-to-delete-checked-items": "Ви впевнені, що хочете видалити всі відмічені елементи?", "are-you-sure-you-want-to-delete-checked-items": "Ви впевнені, що хочете видалити всі відмічені елементи?",
"no-shopping-lists-found": "No Shopping Lists Found" "no-shopping-lists-found": "Списків покупок не знайдено"
}, },
"sidebar": { "sidebar": {
"all-recipes": "Всі рецепти", "all-recipes": "Всі рецепти",
@ -1030,7 +1028,7 @@
"administrator": "Адміністратор", "administrator": "Адміністратор",
"user-can-invite-other-to-group": "Користувач може запрошувати інших в групу", "user-can-invite-other-to-group": "Користувач може запрошувати інших в групу",
"user-can-manage-group": "Користувач може керувати групою", "user-can-manage-group": "Користувач може керувати групою",
"user-can-manage-household": "User can manage household", "user-can-manage-household": "Користувач може управляти сім'єю",
"user-can-organize-group-data": "Користувач може впорядковувати дані групи", "user-can-organize-group-data": "Користувач може впорядковувати дані групи",
"enable-advanced-features": "Увімкнути додаткові функції", "enable-advanced-features": "Увімкнути додаткові функції",
"it-looks-like-this-is-your-first-time-logging-in": "Схоже, ви заходите вперше.", "it-looks-like-this-is-your-first-time-logging-in": "Схоже, ви заходите вперше.",
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "Об'єднання вибраних продуктів об'єднає вихідний продукт та цільовий продукт до одного продукту. Вихідний продукт буде видалений і всі посилання на вихідний продукт будуть посилатися на цільовий продукт.", "merge-dialog-text": "Об'єднання вибраних продуктів об'єднає вихідний продукт та цільовий продукт до одного продукту. Вихідний продукт буде видалений і всі посилання на вихідний продукт будуть посилатися на цільовий продукт.",
"merge-food-example": "Об'єднання {food1} в {food2}", "merge-food-example": "Об'єднання {food1} в {food2}",
"seed-dialog-text": "Заповнити базу даних інгредієнтами що відповідають мові. Це додасть 200+ розповсюджених інгредієнтів що можуть бути використані для організації бази даних. Назви перекладені громадськими зусиллями.", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "У вас вже є деякі елементи в базі даних. Ця дія не зможе об'єднати повторення, вам доведеться зробити це вручну.", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Об'єднати продукти", "combine-food": "Об'єднати продукти",
"source-food": "Вихідний продукт", "source-food": "Вихідний продукт",
"target-food": "Цільовий продукт", "target-food": "Цільовий продукт",
@ -1290,13 +1288,13 @@
"debug-openai-services-description": "Використовуйте цю сторінку, щоб налагодити служби OpenAI. Ви можете перевірити ваше з'єднання з OpenAI й побачити результати тут. Якщо ввімкнено служби зображень, ви також можете надати зображення.", "debug-openai-services-description": "Використовуйте цю сторінку, щоб налагодити служби OpenAI. Ви можете перевірити ваше з'єднання з OpenAI й побачити результати тут. Якщо ввімкнено служби зображень, ви також можете надати зображення.",
"run-test": "Запустити перевірку", "run-test": "Запустити перевірку",
"test-results": "Результати перевірки", "test-results": "Результати перевірки",
"group-delete-note": "Groups with users or households cannot be deleted", "group-delete-note": "Не можна видалити групи з користувачами чи сім'ями в ній",
"household-delete-note": "Households with users cannot be deleted" "household-delete-note": "Не можна видалити сім'ю з користувачами в ній"
}, },
"profile": { "profile": {
"welcome-user": "👋 Ласкаво просимо, {0}!", "welcome-user": "👋 Ласкаво просимо, {0}!",
"description": "Керування вашим профілем, рецептами та налаштуваннями групи.", "description": "Керування вашим профілем, рецептами та налаштуваннями групи.",
"invite-link": "Invite Link", "invite-link": "Посилання-запрошення",
"get-invite-link": "Отримати посилання-запрошення", "get-invite-link": "Отримати посилання-запрошення",
"get-public-link": "Отримати публічне посилання", "get-public-link": "Отримати публічне посилання",
"account-summary": "Аккаунт", "account-summary": "Аккаунт",
@ -1345,9 +1343,9 @@
}, },
"cookbook": { "cookbook": {
"cookbooks": "Кулінарні книги", "cookbooks": "Кулінарні книги",
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes, organizers, and other filters. Creating a cookbook will add an entry to the side-bar and all the recipes with the filters chosen will be displayed in the cookbook.", "description": "Кулінарні книги - це ще один спосіб організовувати рецепти за допомогою розділів та інших фільтрів. Нова кулінарна книга з'явиться на боковій панелі, і всі рецепти, які відповідають обраним фільтрам, будуть показуватися в кулінарній книзі.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households", "hide-cookbooks-from-other-households": "Приховати кулінарні книги від інших сімей",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar", "hide-cookbooks-from-other-households-description": "Якщо вибрано, тільки кулінарні книги вашої сім'ї буде видно на боковій панелі",
"public-cookbook": "Публічна кулінарна книга", "public-cookbook": "Публічна кулінарна книга",
"public-cookbook-description": "Публічними кулінарними книгами можна поділитися з будь-ким, і вони будуть відображатися на сторінці вашої групи.", "public-cookbook-description": "Публічними кулінарними книгами можна поділитися з будь-ким, і вони будуть відображатися на сторінці вашої групи.",
"filter-options": "Параметри фільтра", "filter-options": "Параметри фільтра",

View file

@ -15,7 +15,7 @@
"docs": "Docs", "docs": "Docs",
"download-log": "Download Log", "download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON", "download-recipe-json": "Last Scraped JSON",
"github": "Github", "github": "GitHub",
"log-lines": "Log Lines", "log-lines": "Log Lines",
"not-demo": "Not Demo", "not-demo": "Not Demo",
"portfolio": "Portfolio", "portfolio": "Portfolio",
@ -579,7 +579,6 @@
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Backup Restore", "backup-restore": "Backup Restore",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.", "cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore process in the documentation", "backup-restore-process-in-the-documentation": "backup/restore process in the documentation",
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss", "irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
"restore-backup": "Restore Backup" "restore-backup": "Restore Backup"

View file

@ -15,7 +15,7 @@
"docs": "文档", "docs": "文档",
"download-log": "下载日志", "download-log": "下载日志",
"download-recipe-json": "最后扫描的 JSON", "download-recipe-json": "最后扫描的 JSON",
"github": "Github", "github": "GitHub",
"log-lines": "日志行", "log-lines": "日志行",
"not-demo": "非演示模式", "not-demo": "非演示模式",
"portfolio": "档案", "portfolio": "档案",
@ -127,7 +127,7 @@
"monday": "周一", "monday": "周一",
"name": "名称", "name": "名称",
"new": "新建", "new": "新建",
"never": "永不", "never": "尚无",
"no": "否", "no": "否",
"no-recipe-found": "未找到食谱", "no-recipe-found": "未找到食谱",
"ok": "好的", "ok": "好的",
@ -244,7 +244,7 @@
"keep-my-recipes-private-description": "将您的群组和所有食谱默认设置为私人可见。您可以随时更改此设置" "keep-my-recipes-private-description": "将您的群组和所有食谱默认设置为私人可见。您可以随时更改此设置"
}, },
"manage-members": "管理成员", "manage-members": "管理成员",
"manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", "manage-members-description": "管理你家庭中成员的权限。 {manage} 表示允许用户访问数据管理页面, {invite} 表示允许用户生成链接邀请其他用户。 群组所有者不能更改自己的权限。",
"manage": "管理", "manage": "管理",
"manage-household": "Manage Household", "manage-household": "Manage Household",
"invite": "邀请", "invite": "邀请",
@ -277,7 +277,7 @@
"admin-group-management-text": "对本群组的更改将被立即应用。", "admin-group-management-text": "对本群组的更改将被立即应用。",
"group-id-value": "群组ID{0}", "group-id-value": "群组ID{0}",
"total-households": "Total Households", "total-households": "Total Households",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household" "you-must-select-a-group-before-selecting-a-household": "你必须先选择一个组才能选择一个家庭"
}, },
"household": { "household": {
"household": "Household", "household": "Household",
@ -288,8 +288,8 @@
"household-group": "Household Group", "household-group": "Household Group",
"household-management": "Household Management", "household-management": "Household Management",
"manage-households": "Manage Households", "manage-households": "Manage Households",
"admin-household-management": "Admin Household Management", "admin-household-management": "家庭管理员选项",
"admin-household-management-text": "Changes to this household will be reflected immediately.", "admin-household-management-text": "对家庭的更改将立即生效。",
"household-id-value": "Household Id: {0}", "household-id-value": "Household Id: {0}",
"private-household": "Private Household", "private-household": "Private Household",
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings", "private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings",
@ -579,7 +579,6 @@
"made-this": "我做了这道菜", "made-this": "我做了这道菜",
"how-did-it-turn-out": "成品怎么样?", "how-did-it-turn-out": "成品怎么样?",
"user-made-this": "{user}做了", "user-made-this": "{user}做了",
"last-made-date": "上次制作于{date}",
"api-extras-description": "食谱扩展是Mealie API的关键功能之一。它允许你在食谱中添加自定义JSON键值对以供第三方程序使用。你可以利用这些键提供信息实现更多功能例如触发自动化或转发自定义信息到指定的设备上。", "api-extras-description": "食谱扩展是Mealie API的关键功能之一。它允许你在食谱中添加自定义JSON键值对以供第三方程序使用。你可以利用这些键提供信息实现更多功能例如触发自动化或转发自定义信息到指定的设备上。",
"message-key": "键名", "message-key": "键名",
"parse": "自动解析", "parse": "自动解析",
@ -647,7 +646,6 @@
"nextStep": "下一步", "nextStep": "下一步",
"recipe-actions": "食谱行为", "recipe-actions": "食谱行为",
"parser": { "parser": {
"experimental-alert-text": "Mealie使用自然语言处理解析食材并生成对应的计量单位和食物条目。此项功能尚在试验阶段并非每次都能达到预期效果。如果你不想使用解析结果可以选择取消此时修改将不会被保存。",
"ingredient-parser": "食材解析器", "ingredient-parser": "食材解析器",
"explanation": "若要使用食材解析器,请单击“全部解析”按钮。当解析结果出现时,你可以检查结果是否正确。解析模型的置信分数显示在条目名称的右侧。该分数是各项分数的平均值,且不总是准确的。", "explanation": "若要使用食材解析器,请单击“全部解析”按钮。当解析结果出现时,你可以检查结果是否正确。解析模型的置信分数显示在条目名称的右侧。该分数是各项分数的平均值,且不总是准确的。",
"alerts-explainer": "当匹配到食物或计量单位,而该结果不在数据库中时,会显示提醒。", "alerts-explainer": "当匹配到食物或计量单位,而该结果不在数据库中时,会显示提醒。",
@ -722,7 +720,7 @@
"backup-restore": "备份恢复", "backup-restore": "备份恢复",
"back-restore-description": "恢复该备份将覆盖当前数据库和数据文件夹的数据。 {cannot-be-undone} 若恢复成功,你需要重新登录。", "back-restore-description": "恢复该备份将覆盖当前数据库和数据文件夹的数据。 {cannot-be-undone} 若恢复成功,你需要重新登录。",
"cannot-be-undone": "该操作无法撤销,请谨慎使用!", "cannot-be-undone": "该操作无法撤销,请谨慎使用!",
"postgresql-note": "若你正在使用postgresql请在备份前阅读 {backup-restore-process}", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "文档中的备份/恢复流程", "backup-restore-process-in-the-documentation": "文档中的备份/恢复流程",
"irreversible-acknowledgment": "我已悉知该操作是不可逆的、有破坏性的,并可能造成数据丢失", "irreversible-acknowledgment": "我已悉知该操作是不可逆的、有破坏性的,并可能造成数据丢失",
"restore-backup": "恢复备份" "restore-backup": "恢复备份"
@ -1050,8 +1048,8 @@
"foods": { "foods": {
"merge-dialog-text": "此操作将把“待合并食物”和“目标食物”合并为一个食物(即“目标食物”)。 “待合并食物”将会被删除 ,之前所有对“待合并食物”的引用都会指向“目标食物”。", "merge-dialog-text": "此操作将把“待合并食物”和“目标食物”合并为一个食物(即“目标食物”)。 “待合并食物”将会被删除 ,之前所有对“待合并食物”的引用都会指向“目标食物”。",
"merge-food-example": "正在将{food1}合并到{food2}", "merge-food-example": "正在将{food1}合并到{food2}",
"seed-dialog-text": "基于你的本地语言将一些常见食物添加到数据库。会有200多种常见食物被添加到你的数据库。食物名称由开源社区志愿者翻译。", "seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "你的数据库中已经存在一些数据。此操作不会处理一些可能存在重复的条目,你需要手动管理它们。", "seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "合并食品", "combine-food": "合并食品",
"source-food": "待合并食物", "source-food": "待合并食物",
"target-food": "目标食物", "target-food": "目标食物",
@ -1307,7 +1305,7 @@
"household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.",
"storage-capacity": "总储存容量", "storage-capacity": "总储存容量",
"storage-capacity-description": "你的存储容量基于你上传的图片和资源计算得出。", "storage-capacity-description": "你的存储容量基于你上传的图片和资源计算得出。",
"personal": "个人设置", "personal": "个人",
"personal-description": "这些是你的个人设置。此处的更改不影响同组其他用户。", "personal-description": "这些是你的个人设置。此处的更改不影响同组其他用户。",
"user-settings": "个人资料", "user-settings": "个人资料",
"user-settings-description": "管理偏好、更换密码或邮箱", "user-settings-description": "管理偏好、更换密码或邮箱",

View file

@ -579,7 +579,6 @@
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
@ -647,7 +646,6 @@
"nextStep": "Next step", "nextStep": "Next step",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recipe Actions",
"parser": { "parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.", "explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@ -722,7 +720,7 @@
"backup-restore": "Backup Restore", "backup-restore": "Backup Restore",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.", "cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.", "postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "backup/restore process in the documentation", "backup-restore-process-in-the-documentation": "backup/restore process in the documentation",
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss", "irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
"restore-backup": "Restore Backup" "restore-backup": "Restore Backup"

View file

@ -391,6 +391,11 @@ export interface CreateIngredientFoodAlias {
name: string; name: string;
[k: string]: unknown; [k: string]: unknown;
} }
export interface ShoppingListAddRecipeParamsBulk {
recipeIncrementQuantity?: number;
recipeIngredients?: RecipeIngredient[] | null;
recipeId: string;
}
export interface ShoppingListCreate { export interface ShoppingListCreate {
name?: string | null; name?: string | null;
extras?: { extras?: {

View file

@ -291,6 +291,7 @@ export interface UserBase {
id: string; id: string;
username?: string | null; username?: string | null;
admin: boolean; admin: boolean;
fullName?: string | null;
} }
export interface RecipeCategoryResponse { export interface RecipeCategoryResponse {
name: string; name: string;

View file

@ -1,7 +1,7 @@
import { BaseCRUDAPI } from "../base/base-clients"; import { BaseCRUDAPI } from "../base/base-clients";
import { RecipeIngredient } from "../types/recipe";
import { ApiRequestInstance } from "~/lib/api/types/non-generated"; import { ApiRequestInstance } from "~/lib/api/types/non-generated";
import { import {
ShoppingListAddRecipeParamsBulk,
ShoppingListCreate, ShoppingListCreate,
ShoppingListItemCreate, ShoppingListItemCreate,
ShoppingListItemOut, ShoppingListItemOut,
@ -16,7 +16,7 @@ const prefix = "/api";
const routes = { const routes = {
shoppingLists: `${prefix}/households/shopping/lists`, shoppingLists: `${prefix}/households/shopping/lists`,
shoppingListsId: (id: string) => `${prefix}/households/shopping/lists/${id}`, shoppingListsId: (id: string) => `${prefix}/households/shopping/lists/${id}`,
shoppingListIdAddRecipe: (id: string, recipeId: string) => `${prefix}/households/shopping/lists/${id}/recipe/${recipeId}`, shoppingListIdAddRecipe: (id: string) => `${prefix}/households/shopping/lists/${id}/recipe`,
shoppingListIdRemoveRecipe: (id: string, recipeId: string) => `${prefix}/households/shopping/lists/${id}/recipe/${recipeId}/delete`, shoppingListIdRemoveRecipe: (id: string, recipeId: string) => `${prefix}/households/shopping/lists/${id}/recipe/${recipeId}/delete`,
shoppingListIdUpdateLabelSettings: (id: string) => `${prefix}/households/shopping/lists/${id}/label-settings`, shoppingListIdUpdateLabelSettings: (id: string) => `${prefix}/households/shopping/lists/${id}/label-settings`,
@ -29,8 +29,8 @@ export class ShoppingListsApi extends BaseCRUDAPI<ShoppingListCreate, ShoppingLi
baseRoute = routes.shoppingLists; baseRoute = routes.shoppingLists;
itemRoute = routes.shoppingListsId; itemRoute = routes.shoppingListsId;
async addRecipe(itemId: string, recipeId: string, recipeIncrementQuantity = 1, recipeIngredients: RecipeIngredient[] | null = null) { async addRecipes(itemId: string, data: ShoppingListAddRecipeParamsBulk[]) {
return await this.requests.post(routes.shoppingListIdAddRecipe(itemId, recipeId), { recipeIncrementQuantity, recipeIngredients }); return await this.requests.post(routes.shoppingListIdAddRecipe(itemId), data);
} }
async removeRecipe(itemId: string, recipeId: string, recipeDecrementQuantity = 1) { async removeRecipe(itemId: string, recipeId: string, recipeDecrementQuantity = 1) {

View file

@ -146,6 +146,8 @@ import {
mdiFileCabinet, mdiFileCabinet,
mdiSilverwareForkKnife, mdiSilverwareForkKnife,
mdiCodeTags, mdiCodeTags,
mdiKnife,
mdiCookie
} from "@mdi/js"; } from "@mdi/js";
export const icons = { export const icons = {
@ -271,6 +273,8 @@ export const icons = {
windowClose: mdiWindowClose, windowClose: mdiWindowClose,
zip: mdiFolderZipOutline, zip: mdiFolderZipOutline,
undo: mdiUndo, undo: mdiUndo,
knfife: mdiKnife,
bread: mdiCookie,
// Crud // Crud
backArrow: mdiArrowLeftBoldOutline, backArrow: mdiArrowLeftBoldOutline,

View file

@ -1,6 +1,6 @@
{ {
"name": "mealie", "name": "mealie",
"version": "2.5.0", "version": "2.8.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "nuxt", "dev": "nuxt",

View file

@ -1,13 +1,6 @@
<template> <template>
<v-container v-if="recipe"> <v-container v-if="recipe">
<v-container> <v-container>
<v-alert dismissible border="left" colored-border type="warning" elevation="2" :icon="$globals.icons.alert">
<b>{{ $tc("banner-experimental.title") }}</b>
<div>
{{ $tc("recipe.parser.experimental-alert-text") }}
</div>
</v-alert>
<BaseCardSectionTitle :title="$tc('recipe.parser.ingredient-parser')"> <BaseCardSectionTitle :title="$tc('recipe.parser.ingredient-parser')">
<div class="mt-4">{{ $tc("recipe.parser.explanation") }}</div> <div class="mt-4">{{ $tc("recipe.parser.explanation") }}</div>

View file

@ -151,6 +151,24 @@
</div> </div>
</div> </div>
<!-- Create Item -->
<div v-if="createEditorOpen">
<ShoppingListItemEditor
v-model="createListItemData"
class="my-4"
:labels="allLabels || []"
:units="allUnits || []"
:foods="allFoods || []"
:allow-delete="false"
@delete="createEditorOpen = false"
@cancel="createEditorOpen = false"
@save="createListItem"
/>
</div>
<div v-else class="d-flex justify-end">
<BaseButton create @click="createEditorOpen = true" > {{ $t('general.add') }} </BaseButton>
</div>
<!-- Reorder Labels --> <!-- Reorder Labels -->
<BaseDialog <BaseDialog
v-model="reorderLabelsDialog" v-model="reorderLabelsDialog"
@ -177,23 +195,6 @@
</v-card> </v-card>
</BaseDialog> </BaseDialog>
<!-- Create Item -->
<div v-if="createEditorOpen">
<ShoppingListItemEditor
v-model="createListItemData"
class="my-4"
:labels="allLabels || []"
:units="allUnits || []"
:foods="allFoods || []"
@delete="createEditorOpen = false"
@cancel="createEditorOpen = false"
@save="createListItem"
/>
</div>
<div v-else class="mt-4 d-flex justify-end">
<BaseButton create @click="createEditorOpen = true" > {{ $t('general.add') }} </BaseButton>
</div>
<!-- Checked Items --> <!-- Checked Items -->
<div v-if="listItems.checked && listItems.checked.length > 0" class="mt-6"> <div v-if="listItems.checked && listItems.checked.length > 0" class="mt-6">
<div class="d-flex"> <div class="d-flex">
@ -833,7 +834,7 @@ export default defineComponent({
loadingCounter.value += 1; loadingCounter.value += 1;
recipeReferenceLoading.value = true; recipeReferenceLoading.value = true;
const { data } = await userApi.shopping.lists.addRecipe(shoppingList.value.id, recipeId); const { data } = await userApi.shopping.lists.addRecipes(shoppingList.value.id, [{ recipeId }]);
recipeReferenceLoading.value = false; recipeReferenceLoading.value = false;
loadingCounter.value -= 1; loadingCounter.value -= 1;

View file

@ -0,0 +1,146 @@
"""remove instructions index
Revision ID: 7cf3054cbbcc
Revises: b9e516e2d3b3
Create Date: 2025-02-09 15:31:00.772295
"""
import sqlalchemy as sa
from sqlalchemy import orm
from alembic import op
from mealie.db.models._model_utils.guid import GUID
from mealie.core.root_logger import get_logger
# revision identifiers, used by Alembic.
revision = "7cf3054cbbcc"
down_revision: str | None = "b9e516e2d3b3"
branch_labels: str | tuple[str, ...] | None = None
depends_on: str | tuple[str, ...] | None = None
logger = get_logger()
class SqlAlchemyBase(orm.DeclarativeBase):
@classmethod
def normalized_fields(cls) -> list[orm.InstrumentedAttribute]:
return []
class RecipeModel(SqlAlchemyBase):
__tablename__ = "recipes"
id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate)
name_normalized: orm.Mapped[str] = orm.mapped_column(sa.String, nullable=False, index=True)
description_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
@classmethod
def normalized_fields(cls):
return [cls.name_normalized, cls.description_normalized]
class RecipeIngredientModel(SqlAlchemyBase):
__tablename__ = "recipes_ingredients"
id: orm.Mapped[int] = orm.mapped_column(sa.Integer, primary_key=True)
note_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
original_text_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
@classmethod
def normalized_fields(cls):
return [cls.note_normalized, cls.original_text_normalized]
class IngredientFoodModel(SqlAlchemyBase):
__tablename__ = "ingredient_foods"
id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate)
name_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
plural_name_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
@classmethod
def normalized_fields(cls):
return [cls.name_normalized, cls.plural_name_normalized]
class IngredientFoodAliasModel(SqlAlchemyBase):
__tablename__ = "ingredient_foods_aliases"
id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate)
name_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
@classmethod
def normalized_fields(cls):
return [cls.name_normalized]
class IngredientUnitModel(SqlAlchemyBase):
__tablename__ = "ingredient_units"
id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate)
name_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
plural_name_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
abbreviation_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
plural_abbreviation_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
@classmethod
def normalized_fields(cls):
return [
cls.name_normalized,
cls.plural_name_normalized,
cls.abbreviation_normalized,
cls.plural_abbreviation_normalized,
]
class IngredientUnitAliasModel(SqlAlchemyBase):
__tablename__ = "ingredient_units_aliases"
id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate)
name_normalized: orm.Mapped[str | None] = orm.mapped_column(sa.String, index=True)
@classmethod
def normalized_fields(cls):
return [cls.name_normalized]
def truncate_normalized_fields() -> None:
bind = op.get_bind()
session = orm.Session(bind=bind)
models: list[type[SqlAlchemyBase]] = [
RecipeModel,
RecipeIngredientModel,
IngredientFoodModel,
IngredientFoodAliasModel,
IngredientUnitModel,
IngredientUnitAliasModel,
]
for model in models:
for record in session.query(model).all():
for field in model.normalized_fields():
if not (field_value := getattr(record, field.key)):
continue
setattr(record, field.key, field_value[:255])
try:
session.commit()
except Exception:
logger.exception(f"Failed to truncate normalized fields for {model.__name__}")
session.rollback()
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("recipe_instructions", schema=None) as batch_op:
batch_op.drop_index("ix_recipe_instructions_text")
# ### end Alembic commands ###
truncate_normalized_fields()
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("recipe_instructions", schema=None) as batch_op:
batch_op.create_index("ix_recipe_instructions_text", ["text"], unique=False)
# ### end Alembic commands ###

View file

@ -1,3 +1,12 @@
import re
import warnings
# pyrdfa3 is no longer being updated and has docstrings that emit syntax warnings
warnings.filterwarnings(
"ignore", module=".*pyRdfa", category=SyntaxWarning, message=re.escape("invalid escape sequence '\\-'")
)
# ruff: noqa: E402
from collections.abc import AsyncGenerator from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
@ -115,6 +124,7 @@ register_debug_handler(app)
async def start_scheduler(): async def start_scheduler():
SchedulerRegistry.register_daily( SchedulerRegistry.register_daily(
tasks.purge_expired_tokens,
tasks.purge_group_registration, tasks.purge_group_registration,
tasks.purge_password_reset_tokens, tasks.purge_password_reset_tokens,
tasks.purge_group_data_exports, tasks.purge_group_data_exports,

View file

@ -43,3 +43,6 @@ def mealie_registered_exceptions(t: Translator) -> dict:
class UserLockedOut(Exception): ... class UserLockedOut(Exception): ...
class MissingClaimException(Exception): ...

View file

@ -5,6 +5,7 @@ from sqlalchemy.orm.session import Session
from mealie.core import root_logger from mealie.core import root_logger
from mealie.core.config import get_app_settings from mealie.core.config import get_app_settings
from mealie.core.exceptions import MissingClaimException
from mealie.core.security.providers.auth_provider import AuthProvider from mealie.core.security.providers.auth_provider import AuthProvider
from mealie.db.models.users.users import AuthMethod from mealie.db.models.users.users import AuthMethod
from mealie.repos.all_repositories import get_repositories from mealie.repos.all_repositories import get_repositories
@ -25,7 +26,7 @@ class OpenIDProvider(AuthProvider[UserInfo]):
claims = self.data claims = self.data
if not claims: if not claims:
self._logger.error("[OIDC] No claims in the id_token") self._logger.error("[OIDC] No claims in the id_token")
return None raise MissingClaimException()
# Log all claims for debugging # Log all claims for debugging
self._logger.debug("[OIDC] Received claims:") self._logger.debug("[OIDC] Received claims:")
@ -38,13 +39,13 @@ class OpenIDProvider(AuthProvider[UserInfo]):
self.required_claims, self.required_claims,
claims.keys(), claims.keys(),
) )
return None raise MissingClaimException()
# Check for empty required claims # Check for empty required claims
for claim in self.required_claims: for claim in self.required_claims:
if not claims.get(claim): if not claims.get(claim):
self._logger.error("[OIDC] Required claim '%s' is empty", claim) self._logger.error("[OIDC] Required claim '%s' is empty", claim)
return None raise MissingClaimException()
repos = get_repositories(self.session, group_id=None, household_id=None) repos = get_repositories(self.session, group_id=None, household_id=None)

View file

@ -12,6 +12,7 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
from mealie.core.settings.themes import Theme from mealie.core.settings.themes import Theme
from .db_providers import AbstractDBProvider, db_provider_factory from .db_providers import AbstractDBProvider, db_provider_factory
from .static import PACKAGE_DIR
class ScheduleTime(NamedTuple): class ScheduleTime(NamedTuple):
@ -109,7 +110,7 @@ class AppSettings(AppLoggingSettings):
BASE_URL: str = "http://localhost:8080" BASE_URL: str = "http://localhost:8080"
"""trailing slashes are trimmed (ex. `http://localhost:8080/` becomes ``http://localhost:8080`)""" """trailing slashes are trimmed (ex. `http://localhost:8080/` becomes ``http://localhost:8080`)"""
STATIC_FILES: str = "" STATIC_FILES: str = str(PACKAGE_DIR / "frontend")
"""path to static files directory (ex. `mealie/dist`)""" """path to static files directory (ex. `mealie/dist`)"""
IS_DEMO: bool = False IS_DEMO: bool = False

View file

@ -5,4 +5,5 @@ from mealie import __version__
APP_VERSION = __version__ APP_VERSION = __version__
CWD = Path(__file__).parent CWD = Path(__file__).parent
PACKAGE_DIR = CWD.parent.parent
BASE_DIR = CWD.parent.parent.parent BASE_DIR = CWD.parent.parent.parent

View file

@ -69,16 +69,16 @@ def db_is_at_head(alembic_cfg: config.Config) -> bool:
def safe_try(func: Callable): def safe_try(func: Callable):
try: try:
func() func()
except Exception as e: except Exception:
logger.error(f"Error calling '{func.__name__}': {e}") logger.exception(f"Error calling '{func.__name__}'")
def connect(session: orm.Session) -> bool: def connect(session: orm.Session) -> bool:
try: try:
session.execute(text("SELECT 1")) session.execute(text("SELECT 1"))
return True return True
except Exception as e: except Exception:
logger.error(f"Error connecting to database: {e}") logger.exception("Error connecting to database")
return False return False
@ -106,23 +106,27 @@ def main():
if not os.path.isfile(alembic_cfg_path): if not os.path.isfile(alembic_cfg_path):
raise Exception("Provided alembic config path doesn't exist") raise Exception("Provided alembic config path doesn't exist")
run_fixes = False
alembic_cfg = Config(alembic_cfg_path) alembic_cfg = Config(alembic_cfg_path)
if db_is_at_head(alembic_cfg): if db_is_at_head(alembic_cfg):
logger.debug("Migration not needed.") logger.debug("Migration not needed.")
else: else:
logger.info("Migration needed. Performing migration...") logger.info("Migration needed. Performing migration...")
command.upgrade(alembic_cfg, "head") command.upgrade(alembic_cfg, "head")
run_fixes = True
if session.get_bind().name == "postgresql": # needed for fuzzy search and fast GIN text indices if session.get_bind().name == "postgresql": # needed for fuzzy search and fast GIN text indices
session.execute(text("CREATE EXTENSION IF NOT EXISTS pg_trgm;")) session.execute(text("CREATE EXTENSION IF NOT EXISTS pg_trgm;"))
db = get_repositories(session, group_id=None, household_id=None) db = get_repositories(session, group_id=None, household_id=None)
safe_try(lambda: fix_migration_data(session))
safe_try(lambda: fix_slug_food_names(db))
safe_try(lambda: fix_group_with_no_name(session))
if db.users.get_all(): if db.users.get_all():
logger.debug("Database exists") logger.debug("Database exists")
if run_fixes:
safe_try(lambda: fix_migration_data(session))
safe_try(lambda: fix_slug_food_names(db))
safe_try(lambda: fix_group_with_no_name(session))
else: else:
logger.info("Database contains no users, initializing...") logger.info("Database contains no users, initializing...")
init_db(session) init_db(session)

View file

@ -18,7 +18,9 @@ class SqlAlchemyBase(DeclarativeBase):
@classmethod @classmethod
def normalize(cls, val: str) -> str: def normalize(cls, val: str) -> str:
return unidecode(val).lower().strip() # We cap the length to 255 to prevent indexes from being too long; see:
# https://www.postgresql.org/docs/current/btree.html
return unidecode(val).lower().strip()[:255]
class BaseMixins: class BaseMixins:

View file

@ -23,8 +23,8 @@ class RecipeInstruction(SqlAlchemyBase):
recipe_id: Mapped[GUID | None] = mapped_column(GUID, ForeignKey("recipes.id"), index=True) recipe_id: Mapped[GUID | None] = mapped_column(GUID, ForeignKey("recipes.id"), index=True)
position: Mapped[int | None] = mapped_column(Integer, index=True) position: Mapped[int | None] = mapped_column(Integer, index=True)
type: Mapped[str | None] = mapped_column(String, default="") type: Mapped[str | None] = mapped_column(String, default="")
title: Mapped[str | None] = mapped_column(String) # This is the section title!!! title: Mapped[str | None] = mapped_column(String) # This is the section title
text: Mapped[str | None] = mapped_column(String, index=True) text: Mapped[str | None] = mapped_column(String)
summary: Mapped[str | None] = mapped_column(String) summary: Mapped[str | None] = mapped_column(String)
ingredient_references: Mapped[list[RecipeIngredientRefLink]] = orm.relationship( ingredient_references: Mapped[list[RecipeIngredientRefLink]] = orm.relationship(

View file

@ -10,12 +10,12 @@
"step-text": "Du kan bruge markdown kode i beskrivelser og andre felter i opskrifter.\n\n**Tilføj et link**\n\n[Mit link](https://demo.mealie.io)\n" "step-text": "Du kan bruge markdown kode i beskrivelser og andre felter i opskrifter.\n\n**Tilføj et link**\n\n[Mit link](https://demo.mealie.io)\n"
}, },
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Udgør",
"serves": "Serves", "serves": "Portioner",
"serving": "Servering", "serving": "Servering",
"servings": "Portioner", "servings": "Portioner",
"yield": "Yield", "yield": "Portioner",
"yields": "Yields" "yields": "Portioner"
} }
}, },
"mealplan": { "mealplan": {

View file

@ -42,7 +42,7 @@
"generic-updated": "{name} was updated", "generic-updated": "{name} was updated",
"generic-created-with-url": "{name} has been created, {url}", "generic-created-with-url": "{name} has been created, {url}",
"generic-updated-with-url": "{name} has been updated, {url}", "generic-updated-with-url": "{name} has been updated, {url}",
"generic-duplicated": "{name} has been duplicates", "generic-duplicated": "{name} has been duplicated",
"generic-deleted": "{name} has been deleted" "generic-deleted": "{name} has been deleted"
}, },
"datetime": { "datetime": {
@ -51,7 +51,7 @@
"hour": "hour|hours", "hour": "hour|hours",
"minute": "minute|minutes", "minute": "minute|minutes",
"second": "second|seconds", "second": "second|seconds",
"millisecond": "milliecond|milliseconds", "millisecond": "millisecond|milliseconds",
"microsecond": "microsecond|microseconds" "microsecond": "microsecond|microseconds"
}, },
"emails": { "emails": {

View file

@ -4,18 +4,18 @@
}, },
"recipe": { "recipe": {
"unique-name-error": "Reseptien nimien täytyy olla yksilöllisiä", "unique-name-error": "Reseptien nimien täytyy olla yksilöllisiä",
"recipe-created": "Recipe Created", "recipe-created": "Resepti luotu",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "1 kuppi jauhoja", "ingredient-note": "1 kupillinen jauhoja",
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n" "step-text": "Reseptin vaiheet sekä muut kentät reseptisivulla tukevat markdown-syntaksia.\n\n**Lisää linkki**\n\n[Oma linkki](https://demo.mealie.io)\n"
}, },
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Tekee",
"serves": "Serves", "serves": "Annoksia",
"serving": "Serving", "serving": "Annos",
"servings": "Servings", "servings": "Annosta",
"yield": "Yield", "yield": "Tuotto",
"yields": "Yields" "yields": "Tuottaa"
} }
}, },
"mealplan": { "mealplan": {
@ -25,7 +25,7 @@
"user-updated": "Käyttäjä päivitetty", "user-updated": "Käyttäjä päivitetty",
"password-updated": "Salasana päivitetty", "password-updated": "Salasana päivitetty",
"invalid-current-password": "Nykyinen salasana ei kelpaa", "invalid-current-password": "Nykyinen salasana ei kelpaa",
"ldap-update-password-unavailable": "Salasanaa ei voitu päivittää. Käyttäjä hallinnoi LDAP:ia." "ldap-update-password-unavailable": "Salasanaa ei voitu päivittää, sillä käyttäjä on LDAP-hakemiston alainen"
}, },
"group": { "group": {
"report-deleted": "Raportti poistettu." "report-deleted": "Raportti poistettu."
@ -56,25 +56,25 @@
}, },
"emails": { "emails": {
"password": { "password": {
"subject": "Mealie Forgot Password", "subject": "Mealie Unohtunut salasana",
"header_text": "Forgot Password", "header_text": "Unohdin salasanan",
"message_top": "You have requested to reset your password.", "message_top": "Olet pyytänyt salasanasi nollausta.",
"message_bottom": "Please click the button above to reset your password.", "message_bottom": "Klikkaa yllä olevaa painiketta nollataksesi salasanasi.",
"button_text": "Reset Password" "button_text": "Nollaa salasana"
}, },
"invitation": { "invitation": {
"subject": "Invitation to join Mealie", "subject": "Kutsu liittyä Mealieen",
"header_text": "You're Invited!", "header_text": "Sinut on kutsuttu.",
"message_top": "You have been invited to join Mealie.", "message_top": "Sinut on kutsuttu liittymään Mealieen.",
"message_bottom": "Please click the button above to accept the invitation.", "message_bottom": "Ole hyvä ja klikkaa yllä olevaa painiketta hyväksyäksesi kutsun.",
"button_text": "Accept Invitation" "button_text": "Hyväksy kutsu"
}, },
"test": { "test": {
"subject": "Mealie Test Email", "subject": "Mealie Testiviesti",
"header_text": "Test Email", "header_text": "Testiviesti",
"message_top": "This is a test email.", "message_top": "Tämä on testiviesti.",
"message_bottom": "Please click the button above to test the email.", "message_bottom": "Ole hyvä ja klikkaa yllä olevaa painiketta testataksesi sähköpostia.",
"button_text": "Open Mealie" "button_text": "Avaa Mealie"
} }
} }
} }

View file

@ -4,18 +4,18 @@
}, },
"recipe": { "recipe": {
"unique-name-error": "Les noms de recette doivent être uniques", "unique-name-error": "Les noms de recette doivent être uniques",
"recipe-created": "Recipe Created", "recipe-created": "Recette créée",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "100g de farine", "ingredient-note": "100g de farine",
"step-text": "Les étapes de la recette ainsi que les autres champs de la page de recette supportent la syntaxe markdown.\n\n**Ajouter un lien**\n\n[Mon lien](https://demo.mealie.io)\n" "step-text": "Les étapes de la recette ainsi que les autres champs de la page de recette supportent la syntaxe markdown.\n\n**Ajouter un lien**\n\n[Mon lien](https://demo.mealie.io)\n"
}, },
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Fait",
"serves": "Serves", "serves": "Pour",
"serving": "Serving", "serving": "Portion",
"servings": "Servings", "servings": "Portions",
"yield": "Yield", "yield": "Quantité",
"yields": "Yields" "yields": "Produit"
} }
}, },
"mealplan": { "mealplan": {

View file

@ -4,18 +4,18 @@
}, },
"recipe": { "recipe": {
"unique-name-error": "Les noms de recette doivent être uniques", "unique-name-error": "Les noms de recette doivent être uniques",
"recipe-created": "Recipe Created", "recipe-created": "Recette créée",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "1 tasse de Farine", "ingredient-note": "1 tasse de Farine",
"step-text": "Les étapes de la recette ainsi que les autres champs de la page de recette supportent la syntaxe markdown.\n\n**Ajouter un lien**\n\n[Mon lien](https://demo.mealie.io)\n" "step-text": "Les étapes de la recette ainsi que les autres champs de la page de recette supportent la syntaxe markdown.\n\n**Ajouter un lien**\n\n[Mon lien](https://demo.mealie.io)\n"
}, },
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Fait",
"serves": "Serves", "serves": "Sert",
"serving": "Serving", "serving": "Portion",
"servings": "Servings", "servings": "Portions",
"yield": "Yield", "yield": "Rendement",
"yields": "Yields" "yields": "Rendements"
} }
}, },
"mealplan": { "mealplan": {

View file

@ -1,80 +1,80 @@
{ {
"generic": { "generic": {
"server-error": "An unexpected error occurred" "server-error": "Ocorreu un erro inesperado"
}, },
"recipe": { "recipe": {
"unique-name-error": "Recipe names must be unique", "unique-name-error": "Os nomes de receitas deven ser únicos",
"recipe-created": "Recipe Created", "recipe-created": "Receita creada",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "1 Cup Flour", "ingredient-note": "1 Cunca de Fariña",
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n" "step-text": "Os pasos da receita, como outros campos na páxina da receita, suportan a sintaxe markdown.\n\n**Adicionar un link**\n\n[Meu link](https://demo.mealie.io)\n"
}, },
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Fai",
"serves": "Serves", "serves": "Serve",
"serving": "Serving", "serving": "Porción",
"servings": "Servings", "servings": "Porcións",
"yield": "Yield", "yield": "Rendimento",
"yields": "Yields" "yields": "Rendimentos"
} }
}, },
"mealplan": { "mealplan": {
"no-recipes-match-your-rules": "No recipes match your rules" "no-recipes-match-your-rules": "Nengunha receita corresponde às suas regras"
}, },
"user": { "user": {
"user-updated": "User updated", "user-updated": "Usuario atualizado",
"password-updated": "Password updated", "password-updated": "Seña atualizada",
"invalid-current-password": "Invalid current password", "invalid-current-password": "Seña atual inválida",
"ldap-update-password-unavailable": "Unable to update password, user is controlled by LDAP" "ldap-update-password-unavailable": "Imposível atualizar a seña, o usuario é controlado por LDAP"
}, },
"group": { "group": {
"report-deleted": "Report deleted." "report-deleted": "Relatorio eliminado."
}, },
"exceptions": { "exceptions": {
"permission_denied": "You do not have permission to perform this action", "permission_denied": "Non ten permisos para efetuar esta ación",
"no-entry-found": "The requested resource was not found", "no-entry-found": "O recurso solicitado non foi encontrado",
"integrity-error": "Database integrity error", "integrity-error": "Erro de integridade da base de datos",
"username-conflict-error": "This username is already taken", "username-conflict-error": "Este nome de usuario xa está en uso",
"email-conflict-error": "This email is already in use" "email-conflict-error": "Este e-mail xa está a ser utilizado"
}, },
"notifications": { "notifications": {
"generic-created": "{name} was created", "generic-created": "{name} creado",
"generic-updated": "{name} was updated", "generic-updated": "{name} atualizado",
"generic-created-with-url": "{name} has been created, {url}", "generic-created-with-url": "{name} foi creado, {url}",
"generic-updated-with-url": "{name} has been updated, {url}", "generic-updated-with-url": "{name} foi atualizado, {url}",
"generic-duplicated": "{name} has been duplicated", "generic-duplicated": "{name} foi duplicado",
"generic-deleted": "{name} has been deleted" "generic-deleted": "{name} foi eliminado"
}, },
"datetime": { "datetime": {
"year": "year|years", "year": "ano|anos",
"day": "day|days", "day": "dia|dias",
"hour": "hour|hours", "hour": "hora|horas",
"minute": "minute|minutes", "minute": "minuto|minutos",
"second": "second|seconds", "second": "segundo|segundos",
"millisecond": "millisecond|milliseconds", "millisecond": "milisegundo|milisegundos",
"microsecond": "microsecond|microseconds" "microsecond": "microsegundo|microsegundos"
}, },
"emails": { "emails": {
"password": { "password": {
"subject": "Mealie Forgot Password", "subject": "Mealie Esqueceuse da Seña",
"header_text": "Forgot Password", "header_text": "Esquecin a miña seña",
"message_top": "You have requested to reset your password.", "message_top": "Solicitou a reposición da sua seña.",
"message_bottom": "Please click the button above to reset your password.", "message_bottom": "Clique no boton acima para redefinir a sua seña.",
"button_text": "Reset Password" "button_text": "Redefinir Seña"
}, },
"invitation": { "invitation": {
"subject": "Invitation to join Mealie", "subject": "Convite para aderirse ao Mealie",
"header_text": "You're Invited!", "header_text": "Está convidado!",
"message_top": "You have been invited to join Mealie.", "message_top": "Foi convidado para aderirse ao Mealie.",
"message_bottom": "Please click the button above to accept the invitation.", "message_bottom": "Clique no botón acima para aceptar o convite.",
"button_text": "Accept Invitation" "button_text": "Aceptar Convite"
}, },
"test": { "test": {
"subject": "Mealie Test Email", "subject": "Email de Prova do Mealie",
"header_text": "Test Email", "header_text": "Email de Prova",
"message_top": "This is a test email.", "message_top": "Este é un email de prova.",
"message_bottom": "Please click the button above to test the email.", "message_bottom": "Clique no botón acima para provar o email.",
"button_text": "Open Mealie" "button_text": "Abrir o Mealie"
} }
} }
} }

View file

@ -3,7 +3,7 @@
"server-error": "Si è verificato un errore inaspettato" "server-error": "Si è verificato un errore inaspettato"
}, },
"recipe": { "recipe": {
"unique-name-error": "I nomi delle ricette devono essere unici", "unique-name-error": "I nomi delle ricette devono essere univoci",
"recipe-created": "Ricetta Creata", "recipe-created": "Ricetta Creata",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "1 Tazza Di Farina", "ingredient-note": "1 Tazza Di Farina",

View file

@ -4,18 +4,18 @@
}, },
"recipe": { "recipe": {
"unique-name-error": "Nazwy przepisów muszą być unikatowe", "unique-name-error": "Nazwy przepisów muszą być unikatowe",
"recipe-created": "Recipe Created", "recipe-created": "Utworzono przepis",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "1 szklanka mąki", "ingredient-note": "1 szklanka mąki",
"step-text": "Kroki przepisu, jak również inne pola na stronie przepisu obsługują składnię markdown.\n\n**Dodaj link**\n\n[Mój link](https://demo.mealie.io)\n" "step-text": "Kroki przepisu, jak również inne pola na stronie przepisu obsługują składnię markdown.\n\n**Dodaj link**\n\n[Mój link](https://demo.mealie.io)\n"
}, },
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Daje",
"serves": "Serves", "serves": "Wystarcza dla",
"serving": "Serving", "serving": "Porcja",
"servings": "Servings", "servings": "Porcje",
"yield": "Yield", "yield": "Ilość",
"yields": "Yields" "yields": "Porcje"
} }
}, },
"mealplan": { "mealplan": {

View file

@ -4,7 +4,7 @@
}, },
"recipe": { "recipe": {
"unique-name-error": "Nomes de receitas devem ser únicos", "unique-name-error": "Nomes de receitas devem ser únicos",
"recipe-created": "Recipe Created", "recipe-created": "Receita criada",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "1 Xícara de Farinha", "ingredient-note": "1 Xícara de Farinha",
"step-text": "Passos das receitas, assim como outros campos na página da receita, suportam sintaxe \"markdown\".\n\n**Adicione um link**\n\n[Meu Link](https://demo.mealie.io)\n" "step-text": "Passos das receitas, assim como outros campos na página da receita, suportam sintaxe \"markdown\".\n\n**Adicione um link**\n\n[Meu Link](https://demo.mealie.io)\n"
@ -12,8 +12,8 @@
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Makes",
"serves": "Serves", "serves": "Serves",
"serving": "Serving", "serving": "Porção",
"servings": "Servings", "servings": "Porções",
"yield": "Yield", "yield": "Yield",
"yields": "Yields" "yields": "Yields"
} }

View file

@ -4,16 +4,16 @@
}, },
"recipe": { "recipe": {
"unique-name-error": "Назва рецепту повинна бути унікальною", "unique-name-error": "Назва рецепту повинна бути унікальною",
"recipe-created": "Recipe Created", "recipe-created": "Рецепт створено",
"recipe-defaults": { "recipe-defaults": {
"ingredient-note": "Стакан борошна", "ingredient-note": "Стакан борошна",
"step-text": "Кроки рецептів, так само як і інші поля сторінки, підтримують синтаксис markdown.\n\n**Додати посилання**\n\n[Mоє посилання](https://demo.mealie.io)\n" "step-text": "Кроки рецептів, так само як і інші поля сторінки, підтримують синтаксис markdown.\n\n**Додати посилання**\n\n[Моє посилання](https://demo.mealie.io)\n"
}, },
"servings-text": { "servings-text": {
"makes": "Makes", "makes": "Makes",
"serves": "Serves", "serves": "Serves",
"serving": "Serving", "serving": "Порція",
"servings": "Servings", "servings": "Порції",
"yield": "Yield", "yield": "Yield",
"yields": "Yields" "yields": "Yields"
} }

Some files were not shown because too many files have changed in this diff Show more