mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-23 06:45:22 -07:00
Merge branch 'mealie-next' into current-week
This commit is contained in:
commit
28d7e4f695
216 changed files with 12833 additions and 11363 deletions
|
@ -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": {
|
||||||
|
|
|
@ -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
|
||||||
|
|
14
.github/workflows/e2e.yml
vendored
14
.github/workflows/e2e.yml
vendored
|
@ -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
|
||||||
|
|
2
.github/workflows/nightly.yml
vendored
2
.github/workflows/nightly.yml
vendored
|
@ -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:
|
||||||
|
|
2
.github/workflows/partial-backend.yml
vendored
2
.github/workflows/partial-backend.yml
vendored
|
@ -1,4 +1,4 @@
|
||||||
name: Backend Test/Lint
|
name: Backend Lint and Test
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
|
|
19
.github/workflows/partial-builder.yml
vendored
19
.github/workflows/partial-builder.yml
vendored
|
@ -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: |
|
||||||
|
|
36
.github/workflows/partial-frontend.yml
vendored
36
.github/workflows/partial-frontend.yml
vendored
|
@ -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
102
.github/workflows/partial-package.yml
vendored
Normal 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
|
2
.github/workflows/pull-requests.yml
vendored
2
.github/workflows/pull-requests.yml
vendored
|
@ -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:
|
||||||
|
|
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
|
@ -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
7
.gitignore
vendored
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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.0
|
rev: v0.11.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
- id: ruff
|
||||||
- id: ruff-format
|
- id: ruff-format
|
||||||
|
|
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
|
@ -60,5 +60,9 @@
|
||||||
},
|
},
|
||||||
"[vue]": {
|
"[vue]": {
|
||||||
"editor.formatOnSave": false
|
"editor.formatOnSave": false
|
||||||
|
},
|
||||||
|
"[python]": {
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.defaultFormatter": "charliermarsh.ruff"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
99
Taskfile.yml
99
Taskfile.yml
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
40
docs/docs/contributors/developers-guide/building-packages.md
Normal file
40
docs/docs/contributors/developers-guide/building-packages.md
Normal 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 .
|
||||||
|
```
|
8
docs/docs/documentation/community-guide/bring-api.md
Normal file
8
docs/docs/documentation/community-guide/bring-api.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
!!! info
|
||||||
|
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
|
||||||
|
|
||||||
|
Mealie supports adding the ingredients of a recipe to your [Bring](https://www.getbring.com/) shopping list, as you can
|
||||||
|
see [here](https://docs.mealie.io/documentation/getting-started/features/#recipe-actions).
|
||||||
|
However, for this to work, your Mealie instance needs to be exposed to the open Internet so that the Bring servers can access its information. If you don't want your server to be publicly accessible for security reasons, you can use the [Mealie-Bring-API](https://github.com/felixschndr/mealie-bring-api) written by a community member. This integration is entirely local and does not require any service to be exposed to the Internet.
|
||||||
|
|
||||||
|
This is a small web server that runs locally next to your Mealie instance, and instead of Bring pulling the data from you, it pushes the data to Bring. [Check out the project](https://github.com/felixschndr/mealie-bring-api) for more information and installation instructions.
|
|
@ -10,7 +10,7 @@
|
||||||
Mealie supports 3rd party authentication via [OpenID Connect (OIDC)](https://openid.net/connect/), an identity layer built on top of OAuth2. OIDC is supported by many Identity Providers (IdP), including:
|
Mealie supports 3rd party authentication via [OpenID Connect (OIDC)](https://openid.net/connect/), an identity layer built on top of OAuth2. OIDC is supported by many Identity Providers (IdP), including:
|
||||||
|
|
||||||
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
|
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
|
||||||
- [Authelia](https://www.authelia.com/configuration/identity-providers/open-id-connect/)
|
- [Authelia](https://www.authelia.com/integration/openid-connect/mealie/)
|
||||||
- [Keycloak](https://www.keycloak.org/docs/latest/securing_apps/#_oidc)
|
- [Keycloak](https://www.keycloak.org/docs/latest/securing_apps/#_oidc)
|
||||||
- [Okta](https://www.okta.com/openid-connect/)
|
- [Okta](https://www.okta.com/openid-connect/)
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,24 @@
|
||||||
4. Click 'Update'
|
4. Click 'Update'
|
||||||
|
|
||||||
|
|
||||||
|
??? question "Why Link Ingredients to a Recipe Step?"
|
||||||
|
|
||||||
|
### Why Link Ingredients to a Recipe Step?
|
||||||
|
|
||||||
|
Mealie allows you to link ingredients to specific steps in a recipe, ensuring you know exactly when to add each ingredient during the cooking process.
|
||||||
|
|
||||||
|
**Link Ingredients to Steps in a Recipe**
|
||||||
|
|
||||||
|
1. Go to a recipe
|
||||||
|
2. Click the Edit button/icon
|
||||||
|
3. Scroll down to the step you want to link ingredients to
|
||||||
|
4. Click the ellipsis button next to the step and click 'Link Ingredients'
|
||||||
|
5. Check off the Ingredient(s) that you want to link to that step
|
||||||
|
6. Optionally, click 'Next step' to continue linking remaining ingredients to steps, or click 'Save' to Finish
|
||||||
|
7. Click 'Save' on the Recipe
|
||||||
|
|
||||||
|
You can optionally link the same ingredient to multiple steps, which is useful for prepping an ingredient in one step and using it in another.
|
||||||
|
|
||||||
??? question "What is fuzzy search and how do I use it?"
|
??? question "What is fuzzy search and how do I use it?"
|
||||||
|
|
||||||
### What is fuzzy search and how do I use it?
|
### What is fuzzy search and how do I use it?
|
||||||
|
@ -130,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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,6 +229,15 @@
|
||||||
|
|
||||||
## Security and Maintenance
|
## Security and Maintenance
|
||||||
|
|
||||||
|
??? question "How can I use Mealie externally?"
|
||||||
|
|
||||||
|
### How can I use Mealie externally
|
||||||
|
|
||||||
|
Exposing Mealie or any service to the internet can pose significant security risks. Before proceeding, carefully evaluate the potential impacts on your system. Due to the unique nature of each network, we cannot provide specific steps for your setup.
|
||||||
|
|
||||||
|
There is a community guide available for one way to potentially set this up, and you could reach out on Discord for further discussion on what may be best for your network.
|
||||||
|
|
||||||
|
|
||||||
??? question "Can I use fail2ban with Mealie?"
|
??? question "Can I use fail2ban with Mealie?"
|
||||||
|
|
||||||
### Can I use fail2ban with Mealie?
|
### Can I use fail2ban with Mealie?
|
||||||
|
@ -235,6 +262,19 @@
|
||||||
|
|
||||||
## Technical Considerations
|
## Technical Considerations
|
||||||
|
|
||||||
|
|
||||||
|
??? question "Why setup Email?"
|
||||||
|
|
||||||
|
### Why setup Email?
|
||||||
|
|
||||||
|
Mealie uses email to send account invites and password resets. If you don't use these features, you don't need to set up email. There are also other methods to perform these actions that do not require the setup of Email.
|
||||||
|
|
||||||
|
Email settings can be adjusted via environment variables on the backend container:
|
||||||
|
|
||||||
|
- [Backend Config](./installation/backend-config.md)
|
||||||
|
|
||||||
|
Note that many email providers (e.g., Gmail, Outlook) are disabling SMTP Auth and requiring Modern Auth, which Mealie currently does not support. You may need to use an SMTP relay or third-party SMTP provider, such as SMTP2GO.
|
||||||
|
|
||||||
??? question "Why an API?"
|
??? question "Why an API?"
|
||||||
|
|
||||||
### Why an API?
|
### Why an API?
|
||||||
|
|
|
@ -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,6 +84,29 @@ 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 }
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
|
||||||
|
@ -139,6 +162,9 @@ Below is a list of all valid merge fields:
|
||||||
- ${id}
|
- ${id}
|
||||||
- ${slug}
|
- ${slug}
|
||||||
- ${url}
|
- ${url}
|
||||||
|
- ${servings}
|
||||||
|
- ${yieldQuantity}
|
||||||
|
- ${yieldText}
|
||||||
|
|
||||||
To add, modify, or delete Recipe Actions, visit the Data Management page (more on that below).
|
To add, modify, or delete Recipe Actions, visit the Data Management page (more on that below).
|
||||||
|
|
||||||
|
|
|
@ -32,26 +32,26 @@
|
||||||
### 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>[†][secrets]</super> | mealie | Postgres database user |
|
||||||
| POSTGRES_PASSWORD | mealie | Postgres database password |
|
| POSTGRES_PASSWORD<super>[†][secrets]</super> | mealie | Postgres database password |
|
||||||
| POSTGRES_SERVER | postgres | Postgres database server address |
|
| POSTGRES_SERVER<super>[†][secrets]</super> | postgres | Postgres database server address |
|
||||||
| POSTGRES_PORT | 5432 | Postgres database port |
|
| POSTGRES_PORT<super>[†][secrets]</super> | 5432 | Postgres database port |
|
||||||
| POSTGRES_DB | mealie | Postgres database name |
|
| POSTGRES_DB<super>[†][secrets]</super> | mealie | Postgres database name |
|
||||||
| POSTGRES_URL_OVERRIDE | None | Optional Postgres URL override to use instead of POSTGRES\_\* variables |
|
| POSTGRES_URL_OVERRIDE<super>[†][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>[†][secrets]</super> | None | Required For email |
|
||||||
| SMTP_PORT | 587 | Required For email |
|
| SMTP_PORT<super>[†][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>[†][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>[†][secrets]</super> | None | Required if SMTP_AUTH_STRATEGY is 'TLS' or 'SSL' |
|
||||||
|
|
||||||
### Webworker
|
### Webworker
|
||||||
|
|
||||||
|
@ -73,15 +73,15 @@ 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>[†][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>[†][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 |
|
||||||
|
@ -95,17 +95,18 @@ 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>[†][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>[†][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>[†][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_SIGNING_ALGORITHM | RS256 | The algorithm used to sign the id token (examples: RS256, HS256) |
|
||||||
| 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_USER_CLAIM | email | This is the claim which Mealie will use to look up an existing user by (e.g. "email", "preferred_username") |
|
||||||
| OIDC_NAME_CLAIM | name | This is the claim which Mealie will use for the users Full Name |
|
| OIDC_NAME_CLAIM | name | This is the claim which Mealie will use for the users Full Name |
|
||||||
| 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_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** |
|
||||||
|
@ -120,9 +121,9 @@ Mealie supports various integrations using OpenAI. For more information, check o
|
||||||
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>[†][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>[†][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 |
|
||||||
|
@ -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>†</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
|
||||||
|
|
|
@ -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.4.2`
|
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
|
||||||
|
|
||||||
|
|
|
@ -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.4.2 # (3)
|
image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
|
||||||
container_name: mealie
|
container_name: mealie
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
|
|
|
@ -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.4.2 # (3)
|
image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
|
||||||
container_name: mealie
|
container_name: mealie
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -85,12 +85,13 @@ nav:
|
||||||
- OpenID Connect: "documentation/getting-started/authentication/oidc-v2.md"
|
- OpenID Connect: "documentation/getting-started/authentication/oidc-v2.md"
|
||||||
|
|
||||||
- Community Guides:
|
- Community Guides:
|
||||||
|
- Bring API without internet exposure: "documentation/community-guide/bring-api.md"
|
||||||
|
- Automate Backups with n8n: "documentation/community-guide/n8n-backup-automation.md"
|
||||||
|
- Bulk Url Import: "documentation/community-guide/bulk-url-import.md"
|
||||||
|
- Home Assistant: "documentation/community-guide/home-assistant.md"
|
||||||
|
- Import Bookmarklet: "documentation/community-guide/import-recipe-bookmarklet.md"
|
||||||
- iOS Shortcuts: "documentation/community-guide/ios.md"
|
- iOS Shortcuts: "documentation/community-guide/ios.md"
|
||||||
- Reverse Proxy (SWAG): "documentation/community-guide/swag.md"
|
- Reverse Proxy (SWAG): "documentation/community-guide/swag.md"
|
||||||
- Home Assistant: "documentation/community-guide/home-assistant.md"
|
|
||||||
- Bulk Url Import: "documentation/community-guide/bulk-url-import.md"
|
|
||||||
- Import Bookmarklet: "documentation/community-guide/import-recipe-bookmarklet.md"
|
|
||||||
- Automate Backups with n8n: "documentation/community-guide/n8n-backup-automation.md"
|
|
||||||
|
|
||||||
- API Reference: "api/redoc.md"
|
- API Reference: "api/redoc.md"
|
||||||
|
|
||||||
|
@ -98,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"
|
||||||
|
|
|
@ -104,9 +104,12 @@
|
||||||
}
|
}
|
||||||
const response = await actions.updateOne(editTarget.value);
|
const response = await actions.updateOne(editTarget.value);
|
||||||
|
|
||||||
// if name changed, redirect to new slug
|
|
||||||
if (response?.slug && book.value?.slug !== response?.slug) {
|
if (response?.slug && book.value?.slug !== response?.slug) {
|
||||||
|
// if name changed, redirect to new slug
|
||||||
router.push(`/g/${route.value.params.groupSlug}/cookbooks/${response?.slug}`);
|
router.push(`/g/${route.value.params.groupSlug}/cookbooks/${response?.slug}`);
|
||||||
|
} else {
|
||||||
|
// otherwise reload the page, since the recipe criteria changed
|
||||||
|
router.go(0);
|
||||||
}
|
}
|
||||||
dialogStates.edit = false;
|
dialogStates.edit = false;
|
||||||
editTarget.value = null;
|
editTarget.value = null;
|
||||||
|
|
|
@ -219,27 +219,34 @@ export default defineComponent({
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const queryFilter = computed(() => {
|
const queryFilter = computed(() => {
|
||||||
const orderBy = props.query?.orderBy || preferences.value.orderBy;
|
return props.query.queryFilter || null;
|
||||||
const orderByFilter = preferences.value.filterNull && orderBy ? `${orderBy} IS NOT NULL` : null;
|
|
||||||
|
|
||||||
if (props.query.queryFilter && orderByFilter) {
|
// TODO: allow user to filter out null values when ordering by a value that may be null (such as lastMade)
|
||||||
return `(${props.query.queryFilter}) AND ${orderByFilter}`;
|
|
||||||
} else if (props.query.queryFilter) {
|
// const orderBy = props.query?.orderBy || preferences.value.orderBy;
|
||||||
return props.query.queryFilter;
|
// const orderByFilter = preferences.value.filterNull && orderBy ? `${orderBy} IS NOT NULL` : null;
|
||||||
} else {
|
|
||||||
return orderByFilter;
|
// if (props.query.queryFilter && orderByFilter) {
|
||||||
}
|
// return `(${props.query.queryFilter}) AND ${orderByFilter}`;
|
||||||
|
// } else if (props.query.queryFilter) {
|
||||||
|
// return props.query.queryFilter;
|
||||||
|
// } else {
|
||||||
|
// return orderByFilter;
|
||||||
|
// }
|
||||||
});
|
});
|
||||||
|
|
||||||
async function fetchRecipes(pageCount = 1) {
|
async function fetchRecipes(pageCount = 1) {
|
||||||
|
const orderDir = props.query?.orderDirection || preferences.value.orderDirection;
|
||||||
|
const orderByNullPosition = props.query?.orderByNullPosition || orderDir === "asc" ? "first" : "last";
|
||||||
return await fetchMore(
|
return await fetchMore(
|
||||||
page.value,
|
page.value,
|
||||||
perPage * pageCount,
|
perPage * pageCount,
|
||||||
props.query?.orderBy || preferences.value.orderBy,
|
props.query?.orderBy || preferences.value.orderBy,
|
||||||
props.query?.orderDirection || preferences.value.orderDirection,
|
orderDir,
|
||||||
|
orderByNullPosition,
|
||||||
props.query,
|
props.query,
|
||||||
// we use a computed queryFilter to filter out recipes that have a null value for the property we're sorting by
|
// we use a computed queryFilter to filter out recipes that have a null value for the property we're sorting by
|
||||||
queryFilter.value
|
queryFilter.value,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -371,7 +371,7 @@ export default defineComponent({
|
||||||
const groupRecipeActionsStore = useGroupRecipeActions();
|
const groupRecipeActionsStore = useGroupRecipeActions();
|
||||||
|
|
||||||
async function executeRecipeAction(action: GroupRecipeActionOut) {
|
async function executeRecipeAction(action: GroupRecipeActionOut) {
|
||||||
const response = await groupRecipeActionsStore.execute(action, props.recipe);
|
const response = await groupRecipeActionsStore.execute(action, props.recipe, props.recipeScale);
|
||||||
|
|
||||||
if (action.actionType === "post") {
|
if (action.actionType === "post") {
|
||||||
if (!response?.error) {
|
if (!response?.error) {
|
||||||
|
|
|
@ -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>[] = [];
|
|
||||||
recipeIngredientSections.value.forEach((section) => {
|
|
||||||
if (!selectedShoppingList.value) {
|
if (!selectedShoppingList.value) {
|
||||||
return;
|
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;
|
||||||
|
|
|
@ -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
|
||||||
|
x-large
|
||||||
|
color="primary"
|
||||||
|
v-bind="attrs"
|
||||||
|
v-on="on"
|
||||||
|
@click="madeThisDialog = true"
|
||||||
>
|
>
|
||||||
<v-icon left>
|
<v-icon left large>{{ $globals.icons.calendar }}</v-icon>
|
||||||
{{ $globals.icons.calendar }}
|
<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>
|
||||||
</v-icon>
|
<v-icon right large>{{ $globals.icons.createAlt }}</v-icon>
|
||||||
<div v-if="lastMadeReady">
|
</v-btn>
|
||||||
{{ $t('recipe.last-made-date', { date: lastMade ? new Date(lastMade).toLocaleDateString($i18n.locale) : $t("general.never") } ) }}
|
</template>
|
||||||
</div>
|
<span>{{ $tc("recipe.made-this") }}</span>
|
||||||
<div v-else>
|
</v-tooltip>
|
||||||
<AppLoader tiny />
|
</v-row>
|
||||||
</div>
|
|
||||||
</v-chip>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex justify-center flex-wrap mt-1">
|
|
||||||
<BaseButton :small="$vuetify.breakpoint.smAndDown" @click="madeThisDialog = true">
|
|
||||||
<template #icon> {{ $globals.icons.chefHat }} </template>
|
|
||||||
{{ $t('recipe.made-this') }}
|
|
||||||
</BaseButton>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -30,12 +30,17 @@
|
||||||
<span v-html="recipeYield"></span>
|
<span v-html="recipeYield"></span>
|
||||||
</v-chip>
|
</v-chip>
|
||||||
</div>
|
</div>
|
||||||
|
<v-row class="d-flex justify-start">
|
||||||
<RecipeTimeCard
|
<RecipeTimeCard
|
||||||
:prep-time="recipe.prepTime"
|
:prep-time="recipe.prepTime"
|
||||||
:total-time="recipe.totalTime"
|
:total-time="recipe.totalTime"
|
||||||
:perform-time="recipe.performTime"
|
:perform-time="recipe.performTime"
|
||||||
|
small
|
||||||
color="white"
|
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>
|
||||||
|
|
|
@ -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 }}
|
{{ $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-chip>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-container>
|
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<v-divider v-if="validateTotalTime && (validatePrepTime || validatePerformTime)" class="my-2" />
|
||||||
<v-container :class="containerClass">
|
<!-- Prep Time & Perform Time -->
|
||||||
<v-chip
|
<div v-if="validatePrepTime || validatePerformTime" class="time-card-flex mx-auto">
|
||||||
v-for="(time, index) in allTimes"
|
<v-row
|
||||||
:key="index"
|
no-gutters
|
||||||
:small="$vuetify.breakpoint.smAndDown"
|
class="d-flex justify-center align-center" :class="{'flex-column': $vuetify.breakpoint.smAndDown}"
|
||||||
label
|
style="width: 100%;" :style="fontSize"
|
||||||
:color="color"
|
|
||||||
class="ma-1"
|
|
||||||
>
|
>
|
||||||
<v-icon left>
|
<div v-if="validatePrepTime" class="d-flex flex-no-wrap my-1">
|
||||||
{{ $globals.icons.clockOutline }}
|
<v-icon :large="!small" :dense="small" left color="primary">
|
||||||
|
{{ $globals.icons.knfife }}
|
||||||
</v-icon>
|
</v-icon>
|
||||||
{{ time.name }} |
|
<p class="my-0"><span class="font-weight-bold">{{ validatePrepTime.name }}</span><br>{{ validatePrepTime.value }}</p>
|
||||||
{{ time.value }}
|
</div>
|
||||||
</v-chip>
|
<v-divider v-if="validatePrepTime && validatePerformTime" vertical class="mx-4" />
|
||||||
</v-container>
|
<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,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -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>
|
||||||
|
<p class="my-0">
|
||||||
|
<span class="font-weight-bold">{{ $i18n.tc("recipe.yield") }}</span><br>
|
||||||
<!-- eslint-disable-next-line vue/no-v-html -->
|
<!-- eslint-disable-next-line vue/no-v-html -->
|
||||||
<span v-html="displayText"></span>
|
<span v-html="scaledAmount"></span> {{ text }}
|
||||||
</v-chip>
|
</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)) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
const {scaledAmountDisplay} = useScaledAmount(props.yieldQuantity, props.scale);
|
const {scaledAmountDisplay} = useScaledAmount(props.yieldQuantity, props.scale);
|
||||||
|
return scaledAmountDisplay;
|
||||||
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,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -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,15 +81,14 @@
|
||||||
<v-spacer />
|
<v-spacer />
|
||||||
</div>
|
</div>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
|
||||||
<v-card-actions class="ma-0 pt-0 pb-1 justify-end">
|
<v-card-actions class="ma-0 pt-0 pb-1 justify-end">
|
||||||
<BaseButtonGroup
|
<BaseButtonGroup
|
||||||
:buttons="[
|
:buttons="[
|
||||||
{
|
...(allowDelete ? [{
|
||||||
icon: $globals.icons.delete,
|
icon: $globals.icons.delete,
|
||||||
text: $t('general.delete'),
|
text: $t('general.delete'),
|
||||||
event: 'delete',
|
event: 'delete',
|
||||||
},
|
}] : []),
|
||||||
{
|
{
|
||||||
icon: $globals.icons.close,
|
icon: $globals.icons.close,
|
||||||
text: $t('general.cancel'),
|
text: $t('general.cancel'),
|
||||||
|
@ -111,6 +111,7 @@
|
||||||
@toggle-foods="listItem.isFood = !listItem.isFood"
|
@toggle-foods="listItem.isFood = !listItem.isFood"
|
||||||
/>
|
/>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
</v-card>
|
||||||
</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();
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { useAsync, useRouter, ref } from "@nuxtjs/composition-api";
|
||||||
import { useAsyncKey } from "../use-utils";
|
import { useAsyncKey } from "../use-utils";
|
||||||
import { usePublicExploreApi } from "~/composables/api/api-client";
|
import { usePublicExploreApi } from "~/composables/api/api-client";
|
||||||
import { useUserApi } from "~/composables/api";
|
import { useUserApi } from "~/composables/api";
|
||||||
import { Recipe } from "~/lib/api/types/recipe";
|
import { OrderByNullPosition, Recipe } from "~/lib/api/types/recipe";
|
||||||
import { RecipeSearchQuery } from "~/lib/api/user/recipes/recipe";
|
import { RecipeSearchQuery } from "~/lib/api/user/recipes/recipe";
|
||||||
|
|
||||||
export const allRecipes = ref<Recipe[]>([]);
|
export const allRecipes = ref<Recipe[]>([]);
|
||||||
|
@ -11,12 +11,14 @@ export const recentRecipes = ref<Recipe[]>([]);
|
||||||
function getParams(
|
function getParams(
|
||||||
orderBy: string | null = null,
|
orderBy: string | null = null,
|
||||||
orderDirection = "desc",
|
orderDirection = "desc",
|
||||||
|
orderByNullPosition: OrderByNullPosition | null = null,
|
||||||
query: RecipeSearchQuery | null = null,
|
query: RecipeSearchQuery | null = null,
|
||||||
queryFilter: string | null = null
|
queryFilter: string | null = null
|
||||||
) {
|
) {
|
||||||
return {
|
return {
|
||||||
orderBy,
|
orderBy,
|
||||||
orderDirection,
|
orderDirection,
|
||||||
|
orderByNullPosition,
|
||||||
paginationSeed: query?._searchSeed, // propagate searchSeed to stabilize random order pagination
|
paginationSeed: query?._searchSeed, // propagate searchSeed to stabilize random order pagination
|
||||||
searchSeed: query?._searchSeed, // unused, but pass it along for completeness of data
|
searchSeed: query?._searchSeed, // unused, but pass it along for completeness of data
|
||||||
search: query?.search,
|
search: query?.search,
|
||||||
|
@ -47,6 +49,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
|
||||||
perPage: number,
|
perPage: number,
|
||||||
orderBy: string | null = null,
|
orderBy: string | null = null,
|
||||||
orderDirection = "desc",
|
orderDirection = "desc",
|
||||||
|
orderByNullPosition: OrderByNullPosition | null = null,
|
||||||
query: RecipeSearchQuery | null = null,
|
query: RecipeSearchQuery | null = null,
|
||||||
queryFilter: string | null = null,
|
queryFilter: string | null = null,
|
||||||
) {
|
) {
|
||||||
|
@ -54,7 +57,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
|
||||||
const { data, error } = await api.recipes.getAll(
|
const { data, error } = await api.recipes.getAll(
|
||||||
page,
|
page,
|
||||||
perPage,
|
perPage,
|
||||||
getParams(orderBy, orderDirection, query, queryFilter),
|
getParams(orderBy, orderDirection, orderByNullPosition, query, queryFilter),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (error?.response?.status === 404) {
|
if (error?.response?.status === 404) {
|
||||||
|
@ -88,7 +91,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getRandom(query: RecipeSearchQuery | null = null, queryFilter: string | null = null) {
|
async function getRandom(query: RecipeSearchQuery | null = null, queryFilter: string | null = null) {
|
||||||
const { data } = await api.recipes.getAll(1, 1, getParams("random", "desc", query, queryFilter));
|
const { data } = await api.recipes.getAll(1, 1, getParams("random", "desc", null, query, queryFilter));
|
||||||
if (data?.items.length) {
|
if (data?.items.length) {
|
||||||
return data.items[0];
|
return data.items[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,17 +46,23 @@ export const useGroupRecipeActions = function (
|
||||||
return groupRecipeActions.value;
|
return groupRecipeActions.value;
|
||||||
});
|
});
|
||||||
|
|
||||||
function parseRecipeActionUrl(url: string, recipe: Recipe): string {
|
function parseRecipeActionUrl(url: string, recipe: Recipe, recipeScale: number): string {
|
||||||
|
const recipeServings = (recipe.recipeServings || 1) * recipeScale;
|
||||||
|
const recipeYieldQuantity = (recipe.recipeYieldQuantity || 1) * recipeScale;
|
||||||
|
|
||||||
/* eslint-disable no-template-curly-in-string */
|
/* eslint-disable no-template-curly-in-string */
|
||||||
return url
|
return url
|
||||||
.replace("${url}", window.location.href)
|
.replace("${url}", window.location.href)
|
||||||
.replace("${id}", recipe.id || "")
|
.replace("${id}", recipe.id || "")
|
||||||
.replace("${slug}", recipe.slug || "")
|
.replace("${slug}", recipe.slug || "")
|
||||||
|
.replace("${servings}", recipeServings.toString())
|
||||||
|
.replace("${yieldQuantity}", recipeYieldQuantity.toString())
|
||||||
|
.replace("${yieldText}", recipe.recipeYield || "")
|
||||||
/* eslint-enable no-template-curly-in-string */
|
/* eslint-enable no-template-curly-in-string */
|
||||||
};
|
};
|
||||||
|
|
||||||
async function execute(action: GroupRecipeActionOut, recipe: Recipe): Promise<void | RequestResponse<unknown>> {
|
async function execute(action: GroupRecipeActionOut, recipe: Recipe, recipeScale: number): Promise<void | RequestResponse<unknown>> {
|
||||||
const url = parseRecipeActionUrl(action.url, recipe);
|
const url = parseRecipeActionUrl(action.url, recipe, recipeScale);
|
||||||
|
|
||||||
switch (action.actionType) {
|
switch (action.actionType) {
|
||||||
case "link":
|
case "link":
|
||||||
|
|
|
@ -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
|
@ -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": "Целева храна",
|
||||||
|
|
|
@ -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í",
|
||||||
|
|
|
@ -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",
|
||||||
|
@ -349,7 +349,7 @@
|
||||||
"note-only": "Pouze poznámka",
|
"note-only": "Pouze poznámka",
|
||||||
"random-meal": "Náhodné jídlo",
|
"random-meal": "Náhodné jídlo",
|
||||||
"random-dinner": "Náhodná večeře",
|
"random-dinner": "Náhodná večeře",
|
||||||
"random-side": "Random Side",
|
"random-side": "Náhodná příloha",
|
||||||
"this-rule-will-apply": "Toto pravidlo se použije {dayCriteria} {mealTypeCriteria}.",
|
"this-rule-will-apply": "Toto pravidlo se použije {dayCriteria} {mealTypeCriteria}.",
|
||||||
"to-all-days": "na všechny dny",
|
"to-all-days": "na všechny dny",
|
||||||
"on-days": "on {0}s",
|
"on-days": "on {0}s",
|
||||||
|
@ -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",
|
||||||
|
@ -1059,14 +1057,14 @@
|
||||||
"food-label": "Označení jídla",
|
"food-label": "Označení jídla",
|
||||||
"edit-food": "Upravit jídlo",
|
"edit-food": "Upravit jídlo",
|
||||||
"food-data": "Data jídla",
|
"food-data": "Data jídla",
|
||||||
"example-food-singular": "ex: Onion",
|
"example-food-singular": "např.: Brambora",
|
||||||
"example-food-plural": "ex: Onions",
|
"example-food-plural": "např.: Brambory",
|
||||||
"label-overwrite-warning": "Toto přiřadí vybraný štítek všem vybraným jídlům a může přepsat stávající štítky.",
|
"label-overwrite-warning": "Toto přiřadí vybraný štítek všem vybraným jídlům a může přepsat stávající štítky.",
|
||||||
"on-hand-checkbox-label": "Nastavením tohoto příznaku bude tato potravina při přidávání receptu do nákupního seznamu ve výchozím nastavení odškrtnuta."
|
"on-hand-checkbox-label": "Nastavením tohoto příznaku bude tato potravina při přidávání receptu do nákupního seznamu ve výchozím nastavení odškrtnuta."
|
||||||
},
|
},
|
||||||
"units": {
|
"units": {
|
||||||
"seed-dialog-text": "Naplnit databázi s běžnými jednotkami používanými ve vašem jazyce.",
|
"seed-dialog-text": "Naplnit databázi s běžnými jednotkami používanými ve vašem jazyce.",
|
||||||
"combine-unit-description": "Combining the selected units will merge the Source Unit and Target Unit into a single unit. The {source-unit-will-be-deleted} and all of the references to the Source Unit will be updated to point to the Target Unit.",
|
"combine-unit-description": "Zkombinování zvolených jednotek spojí zdrojovou a cílovou jednotku do jedné. {source-unit-will-be-deleted} a všechny odkazy na ni budou upraveny na cílovou jednotku.",
|
||||||
"combine-unit": "Kombinovaná jednotka",
|
"combine-unit": "Kombinovaná jednotka",
|
||||||
"source-unit": "Zdrojová jednotka",
|
"source-unit": "Zdrojová jednotka",
|
||||||
"target-unit": "Cílová jednotka",
|
"target-unit": "Cílová jednotka",
|
||||||
|
@ -1081,10 +1079,10 @@
|
||||||
"unit-data": "Data jednotky",
|
"unit-data": "Data jednotky",
|
||||||
"use-abbv": "Používat zkratky",
|
"use-abbv": "Používat zkratky",
|
||||||
"fraction": "Zlomek",
|
"fraction": "Zlomek",
|
||||||
"example-unit-singular": "ex: Tablespoon",
|
"example-unit-singular": "např.: Čajová lžička",
|
||||||
"example-unit-plural": "ex: Tablespoons",
|
"example-unit-plural": "např.: Čajové lžičky",
|
||||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
"example-unit-abbreviation-singular": "např.: čl",
|
||||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
"example-unit-abbreviation-plural": "např.: čl"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"seed-dialog-text": "Naplnit databázi s běžnými popisky používanými ve vašem jazyce.",
|
"seed-dialog-text": "Naplnit databázi s běžnými popisky používanými ve vašem jazyce.",
|
||||||
|
@ -1296,7 +1294,7 @@
|
||||||
"profile": {
|
"profile": {
|
||||||
"welcome-user": "👋 Vítejte, {0}!",
|
"welcome-user": "👋 Vítejte, {0}!",
|
||||||
"description": "Spravujte svůj profil, recepty a nastavení skupiny.",
|
"description": "Spravujte svůj profil, recepty a nastavení skupiny.",
|
||||||
"invite-link": "Invite Link",
|
"invite-link": "Odkaz pozvánky",
|
||||||
"get-invite-link": "Získat odkaz na pozvánku",
|
"get-invite-link": "Získat odkaz na pozvánku",
|
||||||
"get-public-link": "Získat veřejný odkaz",
|
"get-public-link": "Získat veřejný odkaz",
|
||||||
"account-summary": "Přehled účtu",
|
"account-summary": "Přehled účtu",
|
||||||
|
@ -1346,7 +1344,7 @@
|
||||||
"cookbook": {
|
"cookbook": {
|
||||||
"cookbooks": "Kuchařky",
|
"cookbooks": "Kuchařky",
|
||||||
"description": "Kuchařky jsou dalším způsobem, jak uspořádat recepty vytvořením průřezů receptů, organizátorů a dalších filtrů. Vytvořením kuchařky se přidá položka na postranní panel a v kuchařce se zobrazí všechny recepty s vybranými filtry.",
|
"description": "Kuchařky jsou dalším způsobem, jak uspořádat recepty vytvořením průřezů receptů, organizátorů a dalších filtrů. Vytvořením kuchařky se přidá položka na postranní panel a v kuchařce se zobrazí všechny recepty s vybranými filtry.",
|
||||||
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
|
"hide-cookbooks-from-other-households": "Skrýt kuchařky ostatních domácností",
|
||||||
"hide-cookbooks-from-other-households-description": "Pokud je povoleno, objeví se na postranním panelu pouze kuchařské knihy z vaší domácnosti",
|
"hide-cookbooks-from-other-households-description": "Pokud je povoleno, objeví se na postranním panelu pouze kuchařské knihy z vaší domácnosti",
|
||||||
"public-cookbook": "Veřejná kuchařka",
|
"public-cookbook": "Veřejná kuchařka",
|
||||||
"public-cookbook-description": "Veřejné kuchařky mohou být sdíleny s neregistrovanými uživateli a budou zobrazeny na stránce vaší skupiny.",
|
"public-cookbook-description": "Veřejné kuchařky mohou být sdíleny s neregistrovanými uživateli a budou zobrazeny na stránce vaší skupiny.",
|
||||||
|
|
|
@ -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øbslistebegivenheder",
|
"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",
|
||||||
|
@ -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",
|
||||||
|
@ -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",
|
||||||
|
@ -386,34 +386,34 @@
|
||||||
"title": "Copy Me That opskriftshå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,12 +603,12 @@
|
||||||
"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 masseimport",
|
"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",
|
||||||
|
@ -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,14 +713,14 @@
|
||||||
"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/restoreproces 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": "Webhooknavn",
|
"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",
|
||||||
|
@ -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 standarddata",
|
"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"
|
||||||
},
|
},
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": "Χαρτοφυλάκιο",
|
||||||
|
@ -174,7 +174,7 @@
|
||||||
"wednesday": "Τετάρτη",
|
"wednesday": "Τετάρτη",
|
||||||
"yes": "Ναι",
|
"yes": "Ναι",
|
||||||
"foods": "Τρόφιμα",
|
"foods": "Τρόφιμα",
|
||||||
"units": "Μονάδες",
|
"units": "Μονάδες μέτρησης",
|
||||||
"back": "Πίσω",
|
"back": "Πίσω",
|
||||||
"next": "Επόμενο",
|
"next": "Επόμενο",
|
||||||
"start": "Εναρξη",
|
"start": "Εναρξη",
|
||||||
|
@ -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": "Επαναφορά αντιγράφου ασφαλείας"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
@ -277,7 +277,7 @@
|
||||||
"admin-group-management-text": "Los cambios en este grupo se reflejarán inmediatamente.",
|
"admin-group-management-text": "Los cambios en este grupo se reflejarán inmediatamente.",
|
||||||
"group-id-value": "Id del Grupo: {0}",
|
"group-id-value": "Id del Grupo: {0}",
|
||||||
"total-households": "Total de Casas",
|
"total-households": "Total de Casas",
|
||||||
"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": "Debe seleccionar un grupo antes de seleccionar un hogar"
|
||||||
},
|
},
|
||||||
"household": {
|
"household": {
|
||||||
"household": "Casa",
|
"household": "Casa",
|
||||||
|
@ -469,7 +469,7 @@
|
||||||
"categories": "Categorías",
|
"categories": "Categorías",
|
||||||
"cholesterol-content": "Colesterol",
|
"cholesterol-content": "Colesterol",
|
||||||
"comment-action": "Comentar",
|
"comment-action": "Comentar",
|
||||||
"comment": "Comentar",
|
"comment": "Comentario",
|
||||||
"comments": "Comentarios",
|
"comments": "Comentarios",
|
||||||
"delete-confirmation": "¿Estás seguro de eliminar esta receta?",
|
"delete-confirmation": "¿Estás seguro de eliminar esta receta?",
|
||||||
"delete-recipe": "Borrar receta",
|
"delete-recipe": "Borrar receta",
|
||||||
|
@ -518,7 +518,7 @@
|
||||||
"save-recipe-before-use": "Guardar la receta antes de usar",
|
"save-recipe-before-use": "Guardar la receta antes de usar",
|
||||||
"section-title": "Título de la sección",
|
"section-title": "Título de la sección",
|
||||||
"servings": "Porciones",
|
"servings": "Porciones",
|
||||||
"serves-amount": "Serves {amount}",
|
"serves-amount": "Personas {amount}",
|
||||||
"share-recipe-message": "Quería compartir mi receta {0} contigo.",
|
"share-recipe-message": "Quería compartir mi receta {0} contigo.",
|
||||||
"show-nutrition-values": "Mostrar valores nutricionales",
|
"show-nutrition-values": "Mostrar valores nutricionales",
|
||||||
"sodium-content": "Sodio",
|
"sodium-content": "Sodio",
|
||||||
|
@ -547,8 +547,8 @@
|
||||||
"failed-to-add-recipe-to-mealplan": "Error al añadir receta al menú",
|
"failed-to-add-recipe-to-mealplan": "Error al añadir receta al menú",
|
||||||
"failed-to-add-to-list": "No se pudo agregar a la lista",
|
"failed-to-add-to-list": "No se pudo agregar a la lista",
|
||||||
"yield": "Raciones",
|
"yield": "Raciones",
|
||||||
"yields-amount-with-text": "Yields {amount} {text}",
|
"yields-amount-with-text": "Raciones {amount} {text}",
|
||||||
"yield-text": "Yield Text",
|
"yield-text": "Texto de raciones",
|
||||||
"quantity": "Cantidad",
|
"quantity": "Cantidad",
|
||||||
"choose-unit": "Elija unidad",
|
"choose-unit": "Elija unidad",
|
||||||
"press-enter-to-create": "Presione Intro para crear",
|
"press-enter-to-create": "Presione Intro para crear",
|
||||||
|
@ -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",
|
||||||
|
@ -637,9 +636,9 @@
|
||||||
"recipe-debugger-use-openai-description": "Utilice OpenAI para analizar los resultados en lugar de depender de la biblioteca de analizadores. Cuando se crea una receta a través de la URL, esto se hace automáticamente si la biblioteca del analizador falla, pero puede probarla manualmente aquí.",
|
"recipe-debugger-use-openai-description": "Utilice OpenAI para analizar los resultados en lugar de depender de la biblioteca de analizadores. Cuando se crea una receta a través de la URL, esto se hace automáticamente si la biblioteca del analizador falla, pero puede probarla manualmente aquí.",
|
||||||
"debug": "Depuración",
|
"debug": "Depuración",
|
||||||
"tree-view": "Vista en árbol",
|
"tree-view": "Vista en árbol",
|
||||||
"recipe-servings": "Recipe Servings",
|
"recipe-servings": "Cantidad de personas",
|
||||||
"recipe-yield": "Porciones",
|
"recipe-yield": "Porciones",
|
||||||
"recipe-yield-text": "Recipe Yield Text",
|
"recipe-yield-text": "Texto de raciones totales",
|
||||||
"unit": "Unidades",
|
"unit": "Unidades",
|
||||||
"upload-image": "Subir imagen",
|
"upload-image": "Subir imagen",
|
||||||
"screen-awake": "Mantener la pantalla encendida",
|
"screen-awake": "Mantener la pantalla encendida",
|
||||||
|
@ -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.",
|
||||||
|
@ -662,24 +660,24 @@
|
||||||
"no-food": "Sin Comida"
|
"no-food": "Sin Comida"
|
||||||
},
|
},
|
||||||
"reset-servings-count": "Restablecer contador de porciones",
|
"reset-servings-count": "Restablecer contador de porciones",
|
||||||
"not-linked-ingredients": "Additional Ingredients"
|
"not-linked-ingredients": "Ingredientes adicionales"
|
||||||
},
|
},
|
||||||
"recipe-finder": {
|
"recipe-finder": {
|
||||||
"recipe-finder": "Recipe Finder",
|
"recipe-finder": "Buscador de recetas",
|
||||||
"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": "Busca recetas basadas en los ingredientes que tengas disponibles. También puede filtrar por utensilios disponibles, y establecer un número máximo de ingredientes o herramientas que faltan.",
|
||||||
"selected-ingredients": "Ingredientes seleccionados",
|
"selected-ingredients": "Ingredientes seleccionados",
|
||||||
"no-ingredients-selected": "Ningún ingrediente seleccionado",
|
"no-ingredients-selected": "Ningún ingrediente seleccionado",
|
||||||
"missing": "Missing",
|
"missing": "Faltan",
|
||||||
"no-recipes-found": "No se encontraron recetas",
|
"no-recipes-found": "No se encontraron recetas",
|
||||||
"no-recipes-found-description": "Intenta añadir más ingredientes a tu búsqueda o ajustar tus filtros",
|
"no-recipes-found-description": "Intenta añadir más ingredientes a tu búsqueda o ajustar tus filtros",
|
||||||
"include-ingredients-on-hand": "Incluye ingredientes a mano",
|
"include-ingredients-on-hand": "Incluye ingredientes a mano",
|
||||||
"include-tools-on-hand": "Include Tools On Hand",
|
"include-tools-on-hand": "Incluye utensilios disponibles",
|
||||||
"max-missing-ingredients": "Max Missing Ingredients",
|
"max-missing-ingredients": "Máximo de ingredientes que faltan",
|
||||||
"max-missing-tools": "Max Missing Tools",
|
"max-missing-tools": "Máximo de utensilios que faltan",
|
||||||
"selected-tools": "Selected Tools",
|
"selected-tools": "Utensilios seleccionados",
|
||||||
"other-filters": "Other Filters",
|
"other-filters": "Otros filtros",
|
||||||
"ready-to-make": "Ready to Make",
|
"ready-to-make": "Listo para hacer",
|
||||||
"almost-ready-to-make": "Almost Ready to Make"
|
"almost-ready-to-make": "Casi listo para hacer"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"advanced-search": "Búsqueda avanzada",
|
"advanced-search": "Búsqueda avanzada",
|
||||||
|
@ -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": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
|
||||||
"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"
|
||||||
|
@ -884,7 +882,7 @@
|
||||||
"are-you-sure-you-want-to-check-all-items": "¿Seguro que quieres seleccionar todos los elementos?",
|
"are-you-sure-you-want-to-check-all-items": "¿Seguro que quieres seleccionar todos los elementos?",
|
||||||
"are-you-sure-you-want-to-uncheck-all-items": "¿Seguro que quieres de-seleccionar todos los elementos?",
|
"are-you-sure-you-want-to-uncheck-all-items": "¿Seguro que quieres de-seleccionar todos los elementos?",
|
||||||
"are-you-sure-you-want-to-delete-checked-items": "¿Está seguro que deseas eliminar los elementos seleccionados?",
|
"are-you-sure-you-want-to-delete-checked-items": "¿Está seguro que deseas eliminar los elementos seleccionados?",
|
||||||
"no-shopping-lists-found": "No Shopping Lists Found"
|
"no-shopping-lists-found": "No hay listas de la compra"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"all-recipes": "Recetas",
|
"all-recipes": "Recetas",
|
||||||
|
@ -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": "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": "Ya tiene algunos elementos en tu base de datos. Esta acción no reconciliará duplicados, tendrá que gestionarlos 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": "Fuente de Alimento",
|
"source-food": "Fuente de Alimento",
|
||||||
"target-food": "Alimentos objetivo",
|
"target-food": "Alimentos objetivo",
|
||||||
|
@ -1296,7 +1294,7 @@
|
||||||
"profile": {
|
"profile": {
|
||||||
"welcome-user": "👋 ¡Bienvenido, {0}!",
|
"welcome-user": "👋 ¡Bienvenido, {0}!",
|
||||||
"description": "Administra tu perfil, recetas y ajustes de grupo.",
|
"description": "Administra tu perfil, recetas y ajustes de grupo.",
|
||||||
"invite-link": "Invite Link",
|
"invite-link": "Link de invitación",
|
||||||
"get-invite-link": "Obtener enlace de invitación",
|
"get-invite-link": "Obtener enlace de invitación",
|
||||||
"get-public-link": "Obtener enlace público",
|
"get-public-link": "Obtener enlace público",
|
||||||
"account-summary": "Información de la cuenta",
|
"account-summary": "Información de la cuenta",
|
||||||
|
@ -1346,7 +1344,7 @@
|
||||||
"cookbook": {
|
"cookbook": {
|
||||||
"cookbooks": "Recetarios",
|
"cookbooks": "Recetarios",
|
||||||
"description": "Los recetarios son otra forma de organizar recetas creando secciones cruzadas de recetas y etiquetas. Crear un recetario añadirá una entrada a la barra lateral y todas las recetas con las etiquetas y categorías elegidas se mostrarán en el recetario.",
|
"description": "Los recetarios son otra forma de organizar recetas creando secciones cruzadas de recetas y etiquetas. Crear un recetario añadirá una entrada a la barra lateral y todas las recetas con las etiquetas y categorías elegidas se mostrarán en el recetario.",
|
||||||
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
|
"hide-cookbooks-from-other-households": "Ocultar libros de cocina de otros grupos/hogares",
|
||||||
"hide-cookbooks-from-other-households-description": "Cuando esté habilitado, sólo los libros de cocina de su hogar aparecerán en la barra lateral",
|
"hide-cookbooks-from-other-households-description": "Cuando esté habilitado, sólo los libros de cocina de su hogar aparecerán en la barra lateral",
|
||||||
"public-cookbook": "Recetario público",
|
"public-cookbook": "Recetario público",
|
||||||
"public-cookbook-description": "Los recetarios públicos se pueden compartir con usuarios externos y se mostrarán en su página de grupos.",
|
"public-cookbook-description": "Los recetarios públicos se pueden compartir con usuarios externos y se mostrarán en su página de grupos.",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
"support": "Tuki",
|
"support": "Tuki",
|
||||||
"version": "Versio",
|
"version": "Versio",
|
||||||
"unknown-version": "tuntematon",
|
"unknown-version": "tuntematon",
|
||||||
"sponsor": "Yhteistyökumppani"
|
"sponsor": "Sponsori"
|
||||||
},
|
},
|
||||||
"asset": {
|
"asset": {
|
||||||
"assets": "Liitteet",
|
"assets": "Liitteet",
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
"enable-notifier": "Ota ilmoittaja käyttöön",
|
"enable-notifier": "Ota ilmoittaja käyttöön",
|
||||||
"what-events": "Mistä tapahtumista tulisi ilmoittaa?",
|
"what-events": "Mistä tapahtumista tulisi ilmoittaa?",
|
||||||
"user-events": "Käyttäjän tapahtumat",
|
"user-events": "Käyttäjän tapahtumat",
|
||||||
"mealplan-events": "Ateriasuunnittelun tapahtumat",
|
"mealplan-events": "Ateriasuunnitelman Tapahtumat",
|
||||||
"when-a-user-in-your-group-creates-a-new-mealplan": "Kun ryhmäsi käyttäjä tekee ateriasuunnitelman",
|
"when-a-user-in-your-group-creates-a-new-mealplan": "Kun ryhmäsi käyttäjä tekee ateriasuunnitelman",
|
||||||
"shopping-list-events": "Ostoslistatapahtumat",
|
"shopping-list-events": "Ostoslistatapahtumat",
|
||||||
"cookbook-events": "Keittokirjatapahtumat",
|
"cookbook-events": "Keittokirjatapahtumat",
|
||||||
|
@ -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",
|
||||||
|
@ -532,7 +532,7 @@
|
||||||
"no-recipe": "Ei reseptiä",
|
"no-recipe": "Ei reseptiä",
|
||||||
"locked-by-owner": "Omistajan lukitsema",
|
"locked-by-owner": "Omistajan lukitsema",
|
||||||
"join-the-conversation": "Liity keskusteluun",
|
"join-the-conversation": "Liity keskusteluun",
|
||||||
"add-recipe-to-mealplan": "Lisää resepti ateriasuunnitelmaan",
|
"add-recipe-to-mealplan": "Lisää resepti Ateriasuunnitelmaan",
|
||||||
"entry-type": "Merkinnän tyyppi",
|
"entry-type": "Merkinnän tyyppi",
|
||||||
"date-format-hint": "KK/PP/VVVV-muoto",
|
"date-format-hint": "KK/PP/VVVV-muoto",
|
||||||
"date-format-hint-yyyy-mm-dd": "VVVV-KK-PP-muoto",
|
"date-format-hint-yyyy-mm-dd": "VVVV-KK-PP-muoto",
|
||||||
|
@ -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.",
|
||||||
|
@ -661,25 +659,25 @@
|
||||||
"missing-food": "Luo puuttuva ruoka: {food}",
|
"missing-food": "Luo puuttuva ruoka: {food}",
|
||||||
"no-food": "Ei ruokaa"
|
"no-food": "Ei ruokaa"
|
||||||
},
|
},
|
||||||
"reset-servings-count": "Reset Servings Count",
|
"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",
|
||||||
|
@ -981,7 +979,7 @@
|
||||||
"register": "Rekisteröidy",
|
"register": "Rekisteröidy",
|
||||||
"reset-password": "Palauta salasana",
|
"reset-password": "Palauta salasana",
|
||||||
"sign-in": "Kirjaudu",
|
"sign-in": "Kirjaudu",
|
||||||
"total-mealplans": "Ateriasuunnitelmia",
|
"total-mealplans": "Ateriasuunnitelma Yhteensä",
|
||||||
"total-users": "Käyttäjien määrä",
|
"total-users": "Käyttäjien määrä",
|
||||||
"upload-photo": "Tuo kuva",
|
"upload-photo": "Tuo kuva",
|
||||||
"use-8-characters-or-more-for-your-password": "Salasanan pituuden on oltava vähintään kahdeksan merkkiä",
|
"use-8-characters-or-more-for-your-password": "Salasanan pituuden on oltava vähintään kahdeksan merkkiä",
|
||||||
|
@ -1030,7 +1028,7 @@
|
||||||
"administrator": "Ylläpitäjä",
|
"administrator": "Ylläpitäjä",
|
||||||
"user-can-invite-other-to-group": "Käyttäjä voi kutsua muita ryhmään",
|
"user-can-invite-other-to-group": "Käyttäjä voi kutsua muita ryhmään",
|
||||||
"user-can-manage-group": "Käyttäjä voi hallita ryhmää",
|
"user-can-manage-group": "Käyttäjä voi hallita ryhmää",
|
||||||
"user-can-manage-household": "User can manage household",
|
"user-can-manage-household": "Käyttäjä voi hallita kotitaloutta",
|
||||||
"user-can-organize-group-data": "Käyttäjä voi järjestellä ryhmän tietoja",
|
"user-can-organize-group-data": "Käyttäjä voi järjestellä ryhmän tietoja",
|
||||||
"enable-advanced-features": "Salli edistyneemmät ominaisuudet",
|
"enable-advanced-features": "Salli edistyneemmät ominaisuudet",
|
||||||
"it-looks-like-this-is-your-first-time-logging-in": "Tämä vaikuttaa olevan ensimmäinen kirjautumisesi.",
|
"it-looks-like-this-is-your-first-time-logging-in": "Tämä vaikuttaa olevan ensimmäinen kirjautumisesi.",
|
||||||
|
@ -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,24 +1277,24 @@
|
||||||
"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}!",
|
||||||
"description": "Hallitse profiiliasi, reseptejäsi ja ryhmäasetuksiasi.",
|
"description": "Hallitse profiiliasi, reseptejäsi ja ryhmäasetuksiasi.",
|
||||||
"invite-link": "Invite Link",
|
"invite-link": "",
|
||||||
"get-invite-link": "Hanki Kutsulinkki",
|
"get-invite-link": "Hanki Kutsulinkki",
|
||||||
"get-public-link": "Julkinen linkki",
|
"get-public-link": "Julkinen linkki",
|
||||||
"account-summary": "Tilin Yhteenveto",
|
"account-summary": "Tilin Yhteenveto",
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -579,7 +579,6 @@
|
||||||
"made-this": "Je l’ai cuisiné",
|
"made-this": "Je l’ai cuisiné",
|
||||||
"how-did-it-turn-out": "C’était bon ?",
|
"how-did-it-turn-out": "C’était bon ?",
|
||||||
"user-made-this": "{user} l’a cuisiné",
|
"user-made-this": "{user} l’a cuisiné",
|
||||||
"last-made-date": "Cuisiné le {date}",
|
|
||||||
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de l’API 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 à l’appareil souhaité.",
|
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de l’API 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 à l’appareil 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 l’aliment source et l’aliment cible en un seul aliment. L’aliment source sera supprimé et toutes les références à l’aliment source seront mises à jour pour pointer vers l’aliment cible.",
|
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera l’aliment source et l’aliment cible en un seul aliment. L’aliment source sera supprimé et toutes les références à l’aliment source seront mises à jour pour pointer vers l’aliment 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",
|
||||||
|
|
|
@ -579,7 +579,6 @@
|
||||||
"made-this": "Je l’ai cuisiné",
|
"made-this": "Je l’ai cuisiné",
|
||||||
"how-did-it-turn-out": "C’était bon ?",
|
"how-did-it-turn-out": "C’était bon ?",
|
||||||
"user-made-this": "{user} l’a cuisiné",
|
"user-made-this": "{user} l’a cuisiné",
|
||||||
"last-made-date": "Cuisiné le {date}",
|
|
||||||
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de l’API 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 à l’appareil souhaité.",
|
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de l’API 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 à l’appareil 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 l’aliment source et l’aliment cible en un seul aliment. L’aliment source sera supprimé et toutes les références à l’aliment source seront mises à jour pour pointer vers l’aliment cible.",
|
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera l’aliment source et l’aliment cible en un seul aliment. L’aliment source sera supprimé et toutes les références à l’aliment source seront mises à jour pour pointer vers l’aliment 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",
|
||||||
|
|
|
@ -579,7 +579,6 @@
|
||||||
"made-this": "Je l’ai cuisiné",
|
"made-this": "Je l’ai cuisiné",
|
||||||
"how-did-it-turn-out": "C’était bon ?",
|
"how-did-it-turn-out": "C’était bon ?",
|
||||||
"user-made-this": "{user} l’a cuisiné",
|
"user-made-this": "{user} l’a cuisiné",
|
||||||
"last-made-date": "Cuisiné le {date}",
|
|
||||||
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de l’API 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 à l’appareil souhaité.",
|
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de l’API 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 à l’appareil 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 l’aliment source et l’aliment cible en un seul aliment. L’aliment source sera supprimé et toutes les références à l’aliment source seront mises à jour pour pointer vers l’aliment cible.",
|
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera l’aliment source et l’aliment cible en un seul aliment. L’aliment source sera supprimé et toutes les références à l’aliment source seront mises à jour pour pointer vers l’aliment 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
|
@ -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": "אוכל יעד",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": "ターゲットの食品",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
"loading": "Kraunasi",
|
"loading": "Kraunasi",
|
||||||
"loading-events": "Užkrovimo įvykiai",
|
"loading-events": "Užkrovimo įvykiai",
|
||||||
"loading-recipe": "Receptai kraunasi...",
|
"loading-recipe": "Receptai kraunasi...",
|
||||||
"loading-ocr-data": "Loading OCR data...",
|
"loading-ocr-data": "Įkeliami OCR duomenys...",
|
||||||
"loading-recipes": "Receptai kraunasi",
|
"loading-recipes": "Receptai kraunasi",
|
||||||
"message": "Pranešimas",
|
"message": "Pranešimas",
|
||||||
"monday": "Pirmadienis",
|
"monday": "Pirmadienis",
|
||||||
|
@ -210,14 +210,14 @@
|
||||||
"upload-file": "Įkelti failą",
|
"upload-file": "Įkelti failą",
|
||||||
"created-on-date": "Sukurta: {0}",
|
"created-on-date": "Sukurta: {0}",
|
||||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
"clipboard-copy-failure": "Nepavyko nukopijuoti į iškarpinę.",
|
||||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||||
"organizers": "Organizers",
|
"organizers": "Organizers",
|
||||||
"caution": "Caution",
|
"caution": "Caution",
|
||||||
"show-advanced": "Show Advanced",
|
"show-advanced": "Rodyti plačiau",
|
||||||
"add-field": "Add Field",
|
"add-field": "Pridėti lauką",
|
||||||
"date-created": "Date Created",
|
"date-created": "Sukūrimo data",
|
||||||
"date-updated": "Date Updated"
|
"date-updated": "Atnaujinimo data"
|
||||||
},
|
},
|
||||||
"group": {
|
"group": {
|
||||||
"are-you-sure-you-want-to-delete-the-group": "Ar tikrai norite ištrinti <b>{groupName}<b/>?",
|
"are-you-sure-you-want-to-delete-the-group": "Ar tikrai norite ištrinti <b>{groupName}<b/>?",
|
||||||
|
@ -322,7 +322,7 @@
|
||||||
"mealplan-update-failed": "Mitybos plano atnaujinti nepavyko",
|
"mealplan-update-failed": "Mitybos plano atnaujinti nepavyko",
|
||||||
"mealplan-updated": "Mitybos planas atnaujintas",
|
"mealplan-updated": "Mitybos planas atnaujintas",
|
||||||
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
|
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
|
||||||
"any-category": "Any Category",
|
"any-category": "Bet kuri kategorija",
|
||||||
"any-tag": "Any Tag",
|
"any-tag": "Any Tag",
|
||||||
"any-household": "Any Household",
|
"any-household": "Any Household",
|
||||||
"no-meal-plan-defined-yet": "Nėra nustatytų mitybos planų",
|
"no-meal-plan-defined-yet": "Nėra nustatytų mitybos planų",
|
||||||
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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ă",
|
||||||
|
|
|
@ -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": "Обработать",
|
||||||
|
@ -601,7 +600,7 @@
|
||||||
"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": "Create from Image",
|
||||||
"should-translate-description": "Translate the recipe into my language",
|
"should-translate-description": "Перевести рецепт на мой язык",
|
||||||
"please-wait-image-procesing": "Подождите, идет обработка изображения.",
|
"please-wait-image-procesing": "Подождите, идет обработка изображения.",
|
||||||
"bulk-url-import": "Массовый импорт по URL",
|
"bulk-url-import": "Массовый импорт по URL",
|
||||||
"debug-scraper": "Отладка сканирования",
|
"debug-scraper": "Отладка сканирования",
|
||||||
|
@ -611,16 +610,16 @@
|
||||||
"scrape-recipe-description": "Отсканировать рецепт по ссылке. Предоставьте ссылку на страницу, которую вы хотите отсканировать, и Mealie попытается вырезать рецепт с этого сайта и добавить его в свою коллекцию.",
|
"scrape-recipe-description": "Отсканировать рецепт по ссылке. Предоставьте ссылку на страницу, которую вы хотите отсканировать, и Mealie попытается вырезать рецепт с этого сайта и добавить его в свою коллекцию.",
|
||||||
"scrape-recipe-have-a-lot-of-recipes": "Хотите отсканировать несколько рецептов за раз?",
|
"scrape-recipe-have-a-lot-of-recipes": "Хотите отсканировать несколько рецептов за раз?",
|
||||||
"scrape-recipe-suggest-bulk-importer": "Воспользуйтесь массовым импортом",
|
"scrape-recipe-suggest-bulk-importer": "Воспользуйтесь массовым импортом",
|
||||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
"scrape-recipe-have-raw-html-or-json-data": "У Вас есть данные HTML или JSON?",
|
||||||
"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": "Импортировать исходные ключевые слова как теги",
|
"import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги",
|
||||||
"stay-in-edit-mode": "Остаться в режиме редактирования",
|
"stay-in-edit-mode": "Остаться в режиме редактирования",
|
||||||
"import-from-zip": "Импорт из архива",
|
"import-from-zip": "Импорт из архива",
|
||||||
"import-from-zip-description": "Импорт одного рецепта, который был экспортирован из другого экземпляра Mealie.",
|
"import-from-zip-description": "Импорт одного рецепта, который был экспортирован из другого экземпляра Mealie.",
|
||||||
"import-from-html-or-json": "Import from HTML or JSON",
|
"import-from-html-or-json": "Импортировать из HTML или JSON",
|
||||||
"import-from-html-or-json-description": "Import a single recipe from raw HTML or JSON. This is useful if you have a recipe from a site that Mealie can't scrape normally, or from some other external source.",
|
"import-from-html-or-json-description": "Import a single recipe from raw HTML or JSON. This is useful if you have a recipe from a site that Mealie can't scrape normally, or from some other external source.",
|
||||||
"json-import-format-description-colon": "To import via JSON, it must be in valid format:",
|
"json-import-format-description-colon": "To import via JSON, it must be in valid format:",
|
||||||
"json-editor": "JSON Editor",
|
"json-editor": "Редактор JSON",
|
||||||
"zip-files-must-have-been-exported-from-mealie": ".zip файлы должны быть экспортированы из Mealie",
|
"zip-files-must-have-been-exported-from-mealie": ".zip файлы должны быть экспортированы из Mealie",
|
||||||
"create-a-recipe-by-uploading-a-scan": "Создайте рецепт, загрузив скан.",
|
"create-a-recipe-by-uploading-a-scan": "Создайте рецепт, загрузив скан.",
|
||||||
"upload-a-png-image-from-a-recipe-book": "Загрузить png изображение из книги рецептов",
|
"upload-a-png-image-from-a-recipe-book": "Загрузить png изображение из книги рецептов",
|
||||||
|
@ -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": "Оповещение появится если подходящие продукты или единица измерения найдены, но не занесены в базу данных.",
|
||||||
|
@ -661,16 +659,16 @@
|
||||||
"missing-food": "Create missing food: {food}",
|
"missing-food": "Create missing food: {food}",
|
||||||
"no-food": "Нет еды"
|
"no-food": "Нет еды"
|
||||||
},
|
},
|
||||||
"reset-servings-count": "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": "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.",
|
||||||
"selected-ingredients": "Selected Ingredients",
|
"selected-ingredients": "Выбранные ингредиенты",
|
||||||
"no-ingredients-selected": "No ingredients selected",
|
"no-ingredients-selected": "No ingredients selected",
|
||||||
"missing": "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": "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",
|
||||||
|
@ -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": "Восстановить резервную копию"
|
||||||
|
@ -881,10 +879,10 @@
|
||||||
"completed-on": "Выполнено в {date}",
|
"completed-on": "Выполнено в {date}",
|
||||||
"you-are-offline": "Вы не в сети",
|
"you-are-offline": "Вы не в сети",
|
||||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||||
"are-you-sure-you-want-to-check-all-items": "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-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 all checked items?",
|
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?",
|
||||||
"no-shopping-lists-found": "No Shopping Lists Found"
|
"no-shopping-lists-found": "Списки покупок не найдены"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"all-recipes": "Все рецепты",
|
"all-recipes": "Все рецепты",
|
||||||
|
@ -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": "Второй продукт",
|
||||||
|
@ -1286,17 +1284,17 @@
|
||||||
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
||||||
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
||||||
},
|
},
|
||||||
"debug-openai-services": "Debug OpenAI Services",
|
"debug-openai-services": "Отладка 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 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.",
|
||||||
"run-test": "Run Test",
|
"run-test": "Запустить тест",
|
||||||
"test-results": "Test Results",
|
"test-results": "Результаты тестов",
|
||||||
"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": "👋 Добро пожаловать, {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": "Cведения об учетной записи",
|
"account-summary": "Cведения об учетной записи",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": "Параметри фільтра",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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": "管理偏好、更换密码或邮箱",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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?: {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -93,6 +93,12 @@ export interface GroupSummary {
|
||||||
slug: string;
|
slug: string;
|
||||||
preferences?: ReadGroupPreferences | null;
|
preferences?: ReadGroupPreferences | null;
|
||||||
}
|
}
|
||||||
|
export interface LongLiveTokenCreateResponse {
|
||||||
|
name: string;
|
||||||
|
id: number;
|
||||||
|
createdAt?: string | null;
|
||||||
|
token: string;
|
||||||
|
}
|
||||||
export interface LongLiveTokenIn {
|
export interface LongLiveTokenIn {
|
||||||
name: string;
|
name: string;
|
||||||
integrationId?: string;
|
integrationId?: string;
|
||||||
|
@ -130,7 +136,6 @@ export interface PrivateUser {
|
||||||
lockedAt?: string | null;
|
lockedAt?: string | null;
|
||||||
}
|
}
|
||||||
export interface LongLiveTokenOut {
|
export interface LongLiveTokenOut {
|
||||||
token: string;
|
|
||||||
name: string;
|
name: string;
|
||||||
id: number;
|
id: number;
|
||||||
createdAt?: string | null;
|
createdAt?: string | null;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -84,6 +84,7 @@ export type RecipeSearchQuery = {
|
||||||
page?: number;
|
page?: number;
|
||||||
perPage?: number;
|
perPage?: number;
|
||||||
orderBy?: string;
|
orderBy?: string;
|
||||||
|
orderByNullPosition?: "first" | "last";
|
||||||
|
|
||||||
_searchSeed?: string;
|
_searchSeed?: string;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "mealie",
|
"name": "mealie",
|
||||||
"version": "2.4.2",
|
"version": "2.8.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "nuxt",
|
"dev": "nuxt",
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,69 @@
|
||||||
<v-container>
|
<v-container>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="3" class="text-left">
|
<v-col cols="3" class="text-left">
|
||||||
<ButtonLink :to="`/shopping-lists?disableRedirect=true`" :text="$tc('general.back')" :icon="$globals.icons.backArrow" />
|
<ButtonLink :to="`/shopping-lists?disableRedirect=true`" :text="$tc('shopping-list.all-lists')" :icon="$globals.icons.backArrow" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="6" class="d-flex justify-center">
|
<v-col cols="6" class="d-none d-lg-flex justify-center">
|
||||||
<v-img max-height="100" max-width="100" :src="require('~/static/svgs/shopping-cart.svg')"></v-img>
|
<v-img max-height="100" max-width="100" :src="require('~/static/svgs/shopping-cart.svg')"></v-img>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
<v-col class="d-flex justify-end">
|
||||||
|
<BaseButtonGroup
|
||||||
|
:buttons="[
|
||||||
|
{
|
||||||
|
icon: $globals.icons.contentCopy,
|
||||||
|
text: '',
|
||||||
|
event: 'edit',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
icon: $globals.icons.contentCopy,
|
||||||
|
text: $tc('shopping-list.copy-as-text'),
|
||||||
|
event: 'copy-plain',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: $globals.icons.contentCopy,
|
||||||
|
text: $tc('shopping-list.copy-as-markdown'),
|
||||||
|
event: 'copy-markdown',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: $globals.icons.checkboxOutline,
|
||||||
|
text: $tc('shopping-list.check-all-items'),
|
||||||
|
event: 'check',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: $globals.icons.dotsVertical,
|
||||||
|
text: '',
|
||||||
|
event: 'three-dot',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
icon: $globals.icons.tags,
|
||||||
|
text: $tc('shopping-list.toggle-label-sort'),
|
||||||
|
event: 'sort-by-labels',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: $globals.icons.tags,
|
||||||
|
text: $tc('shopping-list.reorder-labels'),
|
||||||
|
event: 'reorder-labels',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: $globals.icons.tags,
|
||||||
|
text: $tc('shopping-list.manage-labels'),
|
||||||
|
event: 'manage-labels',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
@edit="edit = true"
|
||||||
|
@three-dot="threeDot = true"
|
||||||
|
@check="openCheckAll"
|
||||||
|
@sort-by-labels="sortByLabels"
|
||||||
|
@copy-plain="copyListItems('plain')"
|
||||||
|
@copy-markdown="copyListItems('markdown')"
|
||||||
|
@reorder-labels="toggleReorderLabelsDialog()"
|
||||||
|
@manage-labels="$router.push(`/group/data/labels`)"
|
||||||
|
/>
|
||||||
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
@ -93,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"
|
||||||
|
@ -119,105 +195,10 @@
|
||||||
</v-card>
|
</v-card>
|
||||||
</BaseDialog>
|
</BaseDialog>
|
||||||
|
|
||||||
<!-- Settings -->
|
|
||||||
<BaseDialog
|
|
||||||
v-model="settingsDialog"
|
|
||||||
:icon="$globals.icons.cog"
|
|
||||||
:title="$t('general.settings')"
|
|
||||||
@confirm="updateSettings"
|
|
||||||
>
|
|
||||||
<v-container>
|
|
||||||
<v-form>
|
|
||||||
<v-select
|
|
||||||
v-model="currentUserId"
|
|
||||||
:items="allUsers"
|
|
||||||
item-text="fullName"
|
|
||||||
item-value="id"
|
|
||||||
:label="$t('general.owner')"
|
|
||||||
:prepend-icon="$globals.icons.user"
|
|
||||||
/>
|
|
||||||
</v-form>
|
|
||||||
</v-container>
|
|
||||||
</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
|
|
||||||
v-if="preferences.viewByLabel" edit class="mr-2"
|
|
||||||
:disabled="$nuxt.isOffline"
|
|
||||||
@click="toggleReorderLabelsDialog">
|
|
||||||
<template #icon> {{ $globals.icons.tags }} </template>
|
|
||||||
{{ $t('shopping-list.reorder-labels') }}
|
|
||||||
</BaseButton>
|
|
||||||
<BaseButton create @click="createEditorOpen = true" > {{ $t('general.add') }} </BaseButton>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Action Bar -->
|
|
||||||
<div class="d-flex justify-end mb-4 mt-2">
|
|
||||||
<BaseButtonGroup
|
|
||||||
:buttons="[
|
|
||||||
{
|
|
||||||
icon: $globals.icons.contentCopy,
|
|
||||||
text: '',
|
|
||||||
event: 'edit',
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
icon: $globals.icons.contentCopy,
|
|
||||||
text: $tc('shopping-list.copy-as-text'),
|
|
||||||
event: 'copy-plain',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: $globals.icons.contentCopy,
|
|
||||||
text: $tc('shopping-list.copy-as-markdown'),
|
|
||||||
event: 'copy-markdown',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: $globals.icons.delete,
|
|
||||||
text: $tc('shopping-list.delete-checked'),
|
|
||||||
event: 'delete',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: $globals.icons.tags,
|
|
||||||
text: $tc('shopping-list.toggle-label-sort'),
|
|
||||||
event: 'sort-by-labels',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: $globals.icons.checkboxBlankOutline,
|
|
||||||
text: $tc('shopping-list.uncheck-all-items'),
|
|
||||||
event: 'uncheck',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: $globals.icons.checkboxOutline,
|
|
||||||
text: $tc('shopping-list.check-all-items'),
|
|
||||||
event: 'check',
|
|
||||||
},
|
|
||||||
]"
|
|
||||||
@edit="edit = true"
|
|
||||||
@delete="openDeleteChecked"
|
|
||||||
@uncheck="openUncheckAll"
|
|
||||||
@check="openCheckAll"
|
|
||||||
@sort-by-labels="sortByLabels"
|
|
||||||
@copy-plain="copyListItems('plain')"
|
|
||||||
@copy-markdown="copyListItems('markdown')"
|
|
||||||
/>
|
|
||||||
</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="flex-grow-1">
|
||||||
<button @click="toggleShowChecked()">
|
<button @click="toggleShowChecked()">
|
||||||
<span>
|
<span>
|
||||||
<v-icon>
|
<v-icon>
|
||||||
|
@ -226,6 +207,26 @@
|
||||||
</span>
|
</span>
|
||||||
{{ $tc('shopping-list.items-checked-count', listItems.checked ? listItems.checked.length : 0) }}
|
{{ $tc('shopping-list.items-checked-count', listItems.checked ? listItems.checked.length : 0) }}
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="justify-end mt-n2">
|
||||||
|
<BaseButtonGroup
|
||||||
|
:buttons="[
|
||||||
|
{
|
||||||
|
icon: $globals.icons.checkboxBlankOutline,
|
||||||
|
text: $tc('shopping-list.uncheck-all-items'),
|
||||||
|
event: 'uncheck',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: $globals.icons.delete,
|
||||||
|
text: $tc('shopping-list.delete-checked'),
|
||||||
|
event: 'delete',
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
@uncheck="openUncheckAll"
|
||||||
|
@delete="openDeleteChecked"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<v-divider class="my-4"></v-divider>
|
<v-divider class="my-4"></v-divider>
|
||||||
<v-expand-transition>
|
<v-expand-transition>
|
||||||
<div v-show="showChecked">
|
<div v-show="showChecked">
|
||||||
|
@ -277,29 +278,6 @@
|
||||||
</RecipeList>
|
</RecipeList>
|
||||||
</section>
|
</section>
|
||||||
</v-lazy>
|
</v-lazy>
|
||||||
|
|
||||||
<v-lazy>
|
|
||||||
<div class="d-flex justify-end">
|
|
||||||
<BaseButton
|
|
||||||
edit
|
|
||||||
:disabled="$nuxt.isOffline"
|
|
||||||
@click="toggleSettingsDialog"
|
|
||||||
>
|
|
||||||
<template #icon> {{ $globals.icons.cog }} </template>
|
|
||||||
{{ $t('general.settings') }}
|
|
||||||
</BaseButton>
|
|
||||||
</div>
|
|
||||||
</v-lazy>
|
|
||||||
|
|
||||||
<v-lazy>
|
|
||||||
<div v-if="$nuxt.isOnline" class="d-flex justify-end mt-10">
|
|
||||||
<ButtonLink
|
|
||||||
:to="`/group/data/labels`"
|
|
||||||
:text="$tc('shopping-list.manage-labels')"
|
|
||||||
:icon="$globals.icons.tags"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</v-lazy>
|
|
||||||
<WakelockSwitch/>
|
<WakelockSwitch/>
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
@ -314,7 +292,6 @@ import { useUserApi } from "~/composables/api";
|
||||||
import MultiPurposeLabelSection from "~/components/Domain/ShoppingList/MultiPurposeLabelSection.vue"
|
import MultiPurposeLabelSection from "~/components/Domain/ShoppingList/MultiPurposeLabelSection.vue"
|
||||||
import ShoppingListItem from "~/components/Domain/ShoppingList/ShoppingListItem.vue";
|
import ShoppingListItem from "~/components/Domain/ShoppingList/ShoppingListItem.vue";
|
||||||
import { ShoppingListItemOut, ShoppingListMultiPurposeLabelOut, ShoppingListOut } from "~/lib/api/types/household";
|
import { ShoppingListItemOut, ShoppingListMultiPurposeLabelOut, ShoppingListOut } from "~/lib/api/types/household";
|
||||||
import { UserOut } from "~/lib/api/types/user";
|
|
||||||
import RecipeList from "~/components/Domain/Recipe/RecipeList.vue";
|
import RecipeList from "~/components/Domain/Recipe/RecipeList.vue";
|
||||||
import ShoppingListItemEditor from "~/components/Domain/ShoppingList/ShoppingListItemEditor.vue";
|
import ShoppingListItemEditor from "~/components/Domain/ShoppingList/ShoppingListItemEditor.vue";
|
||||||
import { useFoodStore, useLabelStore, useUnitStore } from "~/composables/store";
|
import { useFoodStore, useLabelStore, useUnitStore } from "~/composables/store";
|
||||||
|
@ -349,8 +326,8 @@ export default defineComponent({
|
||||||
const userApi = useUserApi();
|
const userApi = useUserApi();
|
||||||
|
|
||||||
const edit = ref(false);
|
const edit = ref(false);
|
||||||
|
const threeDot = ref(false);
|
||||||
const reorderLabelsDialog = ref(false);
|
const reorderLabelsDialog = ref(false);
|
||||||
const settingsDialog = ref(false);
|
|
||||||
const preserveItemOrder = ref(false);
|
const preserveItemOrder = ref(false);
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
@ -678,13 +655,6 @@ export default defineComponent({
|
||||||
localLabels.value = shoppingList.value?.labelSettings
|
localLabels.value = shoppingList.value?.labelSettings
|
||||||
}
|
}
|
||||||
|
|
||||||
async function toggleSettingsDialog() {
|
|
||||||
if (!settingsDialog.value) {
|
|
||||||
await fetchAllUsers();
|
|
||||||
}
|
|
||||||
settingsDialog.value = !settingsDialog.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateLabelOrder(labelSettings: ShoppingListMultiPurposeLabelOut[]) {
|
function updateLabelOrder(labelSettings: ShoppingListMultiPurposeLabelOut[]) {
|
||||||
if (!shoppingList.value) {
|
if (!shoppingList.value) {
|
||||||
return;
|
return;
|
||||||
|
@ -864,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;
|
||||||
|
|
||||||
|
@ -1064,39 +1034,6 @@ export default defineComponent({
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===============================================================
|
|
||||||
// Shopping List Settings
|
|
||||||
|
|
||||||
const allUsers = ref<UserOut[]>([]);
|
|
||||||
const currentUserId = ref<string | undefined>();
|
|
||||||
async function fetchAllUsers() {
|
|
||||||
const { data } = await userApi.households.fetchMembers();
|
|
||||||
if (!data) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// update current user
|
|
||||||
allUsers.value = data.items.sort((a, b) => ((a.fullName || "") < (b.fullName || "") ? -1 : 1));
|
|
||||||
currentUserId.value = shoppingList.value?.userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function updateSettings() {
|
|
||||||
if (!shoppingList.value || !currentUserId.value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
loadingCounter.value += 1;
|
|
||||||
const { data } = await userApi.shopping.lists.updateOne(
|
|
||||||
shoppingList.value.id,
|
|
||||||
{...shoppingList.value, userId: currentUserId.value},
|
|
||||||
);
|
|
||||||
loadingCounter.value -= 1;
|
|
||||||
|
|
||||||
if (data) {
|
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
addRecipeReferenceToList,
|
addRecipeReferenceToList,
|
||||||
|
@ -1112,6 +1049,7 @@ export default defineComponent({
|
||||||
openDeleteChecked,
|
openDeleteChecked,
|
||||||
deleteListItem,
|
deleteListItem,
|
||||||
edit,
|
edit,
|
||||||
|
threeDot,
|
||||||
getLabelColor,
|
getLabelColor,
|
||||||
groupSlug,
|
groupSlug,
|
||||||
itemsByLabel,
|
itemsByLabel,
|
||||||
|
@ -1123,8 +1061,6 @@ export default defineComponent({
|
||||||
removeRecipeReferenceToList,
|
removeRecipeReferenceToList,
|
||||||
reorderLabelsDialog,
|
reorderLabelsDialog,
|
||||||
toggleReorderLabelsDialog,
|
toggleReorderLabelsDialog,
|
||||||
settingsDialog,
|
|
||||||
toggleSettingsDialog,
|
|
||||||
localLabels,
|
localLabels,
|
||||||
updateLabelOrder,
|
updateLabelOrder,
|
||||||
cancelLabelOrder,
|
cancelLabelOrder,
|
||||||
|
@ -1144,9 +1080,6 @@ export default defineComponent({
|
||||||
updateIndexUncheckedByLabel,
|
updateIndexUncheckedByLabel,
|
||||||
allUnits,
|
allUnits,
|
||||||
allFoods,
|
allFoods,
|
||||||
allUsers,
|
|
||||||
currentUserId,
|
|
||||||
updateSettings,
|
|
||||||
getTextColor,
|
getTextColor,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
|
@ -6,6 +6,27 @@
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</BaseDialog>
|
</BaseDialog>
|
||||||
|
|
||||||
|
<!-- Settings -->
|
||||||
|
<BaseDialog
|
||||||
|
v-model="ownerDialog"
|
||||||
|
:icon="$globals.icons.admin"
|
||||||
|
:title="$t('user.edit-user')"
|
||||||
|
@confirm="updateOwner"
|
||||||
|
>
|
||||||
|
<v-container>
|
||||||
|
<v-form>
|
||||||
|
<v-select
|
||||||
|
v-model="updateUserId"
|
||||||
|
:items="allUsers"
|
||||||
|
item-text="fullName"
|
||||||
|
item-value="id"
|
||||||
|
:label="$t('general.owner')"
|
||||||
|
:prepend-icon="$globals.icons.user"
|
||||||
|
/>
|
||||||
|
</v-form>
|
||||||
|
</v-container>
|
||||||
|
</BaseDialog>
|
||||||
|
|
||||||
<BaseDialog v-model="deleteDialog" :title="$tc('general.confirm')" color="error" @confirm="deleteOne">
|
<BaseDialog v-model="deleteDialog" :title="$tc('general.confirm')" color="error" @confirm="deleteOne">
|
||||||
<v-card-text>{{ $t('shopping-list.are-you-sure-you-want-to-delete-this-item') }}</v-card-text>
|
<v-card-text>{{ $t('shopping-list.are-you-sure-you-want-to-delete-this-item') }}</v-card-text>
|
||||||
</BaseDialog>
|
</BaseDialog>
|
||||||
|
@ -38,26 +59,34 @@
|
||||||
<v-icon left>
|
<v-icon left>
|
||||||
{{ $globals.icons.cartCheck }}
|
{{ $globals.icons.cartCheck }}
|
||||||
</v-icon>
|
</v-icon>
|
||||||
|
<div class="flex-grow-1">
|
||||||
{{ list.name }}
|
{{ list.name }}
|
||||||
<v-btn class="ml-auto" icon @click.prevent="openDelete(list.id)">
|
</div>
|
||||||
|
<div class="d-flex justify-end">
|
||||||
|
<v-btn icon @click.prevent="toggleOwnerDialog(list)">
|
||||||
|
<v-icon>
|
||||||
|
{{ $globals.icons.user }}
|
||||||
|
</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
<v-btn icon @click.prevent="openDelete(list.id)">
|
||||||
<v-icon>
|
<v-icon>
|
||||||
{{ $globals.icons.delete }}
|
{{ $globals.icons.delete }}
|
||||||
</v-icon>
|
</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
</div>
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
</v-card>
|
</v-card>
|
||||||
</section>
|
</section>
|
||||||
<div class="d-flex justify-end mt-10">
|
|
||||||
<ButtonLink :to="`/group/data/labels`" :text="$tc('shopping-list.manage-labels')" :icon="$globals.icons.tags" />
|
|
||||||
</div>
|
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed, defineComponent, useAsync, useContext, reactive, ref, toRefs, useRoute, useRouter, watch } from "@nuxtjs/composition-api";
|
import { computed, defineComponent, useAsync, useContext, reactive, ref, toRefs, useRoute, useRouter, watch } from "@nuxtjs/composition-api";
|
||||||
|
import { ShoppingListOut } from "~/lib/api/types/household";
|
||||||
import { useUserApi } from "~/composables/api";
|
import { useUserApi } from "~/composables/api";
|
||||||
import { useAsyncKey } from "~/composables/use-utils";
|
import { useAsyncKey } from "~/composables/use-utils";
|
||||||
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
|
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
|
||||||
|
import { UserOut } from "~/lib/api/types/user";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
middleware: "auth",
|
middleware: "auth",
|
||||||
|
@ -77,6 +106,8 @@ export default defineComponent({
|
||||||
createDialog: false,
|
createDialog: false,
|
||||||
deleteDialog: false,
|
deleteDialog: false,
|
||||||
deleteTarget: "",
|
deleteTarget: "",
|
||||||
|
ownerDialog: false,
|
||||||
|
ownerTarget: ref<ShoppingListOut | null>(null),
|
||||||
});
|
});
|
||||||
|
|
||||||
const shoppingLists = useAsync(async () => {
|
const shoppingLists = useAsync(async () => {
|
||||||
|
@ -136,6 +167,53 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function toggleOwnerDialog(list: ShoppingListOut) {
|
||||||
|
if (!state.ownerDialog) {
|
||||||
|
state.ownerTarget = list;
|
||||||
|
await fetchAllUsers();
|
||||||
|
}
|
||||||
|
state.ownerDialog = !state.ownerDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===============================================================
|
||||||
|
// Shopping List Edit User/Owner
|
||||||
|
|
||||||
|
const allUsers = ref<UserOut[]>([]);
|
||||||
|
const updateUserId = ref<string | undefined>();
|
||||||
|
async function fetchAllUsers() {
|
||||||
|
const { data } = await userApi.households.fetchMembers();
|
||||||
|
if (!data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update current user
|
||||||
|
allUsers.value = data.items.sort((a, b) => ((a.fullName || "") < (b.fullName || "") ? -1 : 1));
|
||||||
|
updateUserId.value = state.ownerTarget?.userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateOwner() {
|
||||||
|
if (!state.ownerTarget || !updateUserId.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// user has not changed, so we should not update
|
||||||
|
if (state.ownerTarget.userId === updateUserId.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// get full list, so the move does not delete shopping list items
|
||||||
|
const { data: fullList } = await userApi.shopping.lists.getOne(state.ownerTarget.id);
|
||||||
|
if (!fullList) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const { data } = await userApi.shopping.lists.updateOne(
|
||||||
|
state.ownerTarget.id,
|
||||||
|
{...fullList, userId: updateUserId.value},
|
||||||
|
);
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function openDelete(id: string) {
|
function openDelete(id: string) {
|
||||||
state.deleteDialog = true;
|
state.deleteDialog = true;
|
||||||
state.deleteTarget = id;
|
state.deleteTarget = id;
|
||||||
|
@ -155,6 +233,10 @@ export default defineComponent({
|
||||||
preferences,
|
preferences,
|
||||||
shoppingListChoices,
|
shoppingListChoices,
|
||||||
createOne,
|
createOne,
|
||||||
|
toggleOwnerDialog,
|
||||||
|
allUsers,
|
||||||
|
updateUserId,
|
||||||
|
updateOwner,
|
||||||
deleteOne,
|
deleteOne,
|
||||||
openDelete,
|
openDelete,
|
||||||
};
|
};
|
||||||
|
|
|
@ -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 ###
|
|
@ -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,
|
||||||
|
|
|
@ -43,3 +43,6 @@ def mealie_registered_exceptions(t: Translator) -> dict:
|
||||||
|
|
||||||
|
|
||||||
class UserLockedOut(Exception): ...
|
class UserLockedOut(Exception): ...
|
||||||
|
|
||||||
|
|
||||||
|
class MissingClaimException(Exception): ...
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
if db.users.get_all():
|
||||||
|
logger.debug("Database exists")
|
||||||
|
if run_fixes:
|
||||||
safe_try(lambda: fix_migration_data(session))
|
safe_try(lambda: fix_migration_data(session))
|
||||||
safe_try(lambda: fix_slug_food_names(db))
|
safe_try(lambda: fix_slug_food_names(db))
|
||||||
safe_try(lambda: fix_group_with_no_name(session))
|
safe_try(lambda: fix_group_with_no_name(session))
|
||||||
|
|
||||||
if db.users.get_all():
|
|
||||||
logger.debug("Database exists")
|
|
||||||
else:
|
else:
|
||||||
logger.info("Database contains no users, initializing...")
|
logger.info("Database contains no users, initializing...")
|
||||||
init_db(session)
|
init_db(session)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue